PHP和Ruby中方法之间的差异

ger*_*rky 1 php oop methods function

我刚刚开始学习PHP.对不起,如果这是一个新手问题,但我想知道方法是如何工作的.例如,如果我想删除字符串开头的空格.在Ruby中,我会称之为:

string.strip!
Run Code Online (Sandbox Code Playgroud)

但在PHP中,我必须做类似的事情:

trim(string);
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*den 7

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

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

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

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

另一方面,PHP具有OOP和程序功能的奇特组合; 它起源于程序语言,OOP仅在版本3中引入(并且仅在非常基本的意义上).虽然从PHP5开始,它具有相对较好的OOP支持,但其大多数标准库仍然在程序上实现为松散的函数集合,这些函数期望将相关的状态/数据作为参数传递给它们.然而,OOP库变得越来越普遍(例如mysqli).

  • 取决于语言.在PHP中,默认情况下它们都在全局命名空间中定义(实际上,直到5.3版本,PHP只有*全局命名空间).但是在Python中,每个模块都有自己的命名空间(尽管全局命名空间中存在一些特殊的功能). (4认同)