1

我刚刚开始学习PHP。抱歉,如果这是一个新手问题,但我想知道方法是如何工作的。例如,如果我想删除字符串开头的空格。在 Ruby 中,我会这样称呼:

string.strip!

但在 PHP 中,我必须执行以下操作:

trim(string);

显然,Ruby 版本更优雅(就面向对象的设计而言),但我想知道它如何适用于 PHP 和 Java 等其他语言。是否有以这种方式设计函数/方法的名称(在 PHP 中)?这些方法在哪里定义,为什么可以在任何地方访问它们?提前非常感谢!

4

2 回答 2

7

这里有两种不同的范式:面向对象编程(OOP) 和过程编程

在 OOP 中,函数是在数据的上下文中定义的,由封装;此类函数通常称为方法。当在对象(例如类的实例)上调用方法时,它固有地可以访问该对象的状态。所以,在你的例子中,strip已经知道它被调用的是什么字符串,因此不需要任何额外的参数。每当您的函数自然地对特定对象或数据集进行操作时(例如,strip作为对字符串的操作),以这种方式将其定义为实例方法是明智的。

在过程式编程中,函数是独立定义的数据结构(类),并且必须显式传递它们要使用的数据。有时这种方法实际上更自然;例如,将print某些输入打印到stdout或类似的函数自然不会与任何特定对象或数据相关联。

大多数现代语言都内置了面向对象的特性,因为它是一种非常通用且功能强大的编程范式。Java 和 C# 等语言鼓励所有代码以面向对象的风格编写。在这些语言中,即使是字符串和浮点等基本数据类型实际上也是对象,并且有自己的方法和状态。在 C# 中尤其如此,所有类型最终都继承自System.Object(even intand double) 并继承由此定义的所有常用方法。这称为统一类型层次结构

另一方面,PHP 具有 OOP 和过程特性的奇妙混合。它最初是一种程序语言,而 OOP 仅在版本 3 中引入(并且仅在非常初级的意义上)。虽然从 PHP5 开始,它具有相对较好的 OOP 支持,但它的大多数标准库仍然在程序上实现为松散的函数集合,这些函数期望将相关状态/数据作为参数传递给它们。然而,OOP 库正变得越来越普遍(例如,使用mysqli)。

于 2012-10-21T13:37:46.540 回答
2

本质上,您正在查看实例方法和类/静态方法之间的区别。实例方法在类的特定实例上调用,它们可以访问该实例的内部状态。类/静态方法不是,也不是。


我不确定您在询问“它如何适用于 PHP 和 ... Java”时要寻找什么。关于实例与非实例方法,Ruby、PHP 和 Java 的工作方式大致相同。

于 2012-10-21T13:27:25.193 回答