PHP和Ruby中方法之间的差异

时间:2012-10-21 13:23:06

标签: php function oop methods

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

string.strip!

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

trim(string);

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

2 个答案:

答案 0 :(得分:7)

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

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

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

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

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

答案 1 :(得分:2)

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


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