我刚开始学习PHP。对不起,如果这是一个新手问题,但我想知道方法是如何工作的。例如,如果我想删除字符串开头的空格。在Ruby中,我会称之为:
string.strip!
但在PHP中,我必须做类似的事情:
trim(string);
显然,Ruby版本更优雅(在面向对象的设计方面),但我想知道它如何适用于PHP和其他语言如Java。是否有以这种方式设计函数/方法的名称(在PHP中)?这些方法在哪里定义,为什么可以在任何地方访问它们?非常感谢提前!
答案 0 :(得分:7)
这里有两种不同的范例:面向对象编程(OOP)和程序编程。
在OOP中,函数在数据上下文中定义,由类封装;这些功能通常称为方法。当在对象(例如,类的实例)上调用方法时,它本身可以访问该对象的状态。因此,在您的示例中,strip
已经知道调用它的字符串,因此不需要任何其他参数。每当您的函数自然地对特定对象或数据集进行操作时(例如,当strip
作用于字符串时),以这种方式将其定义为实例方法是明智的。
在过程编程中,函数是独立定义的数据结构(类),必须显式传递它们要使用的数据。有时这种方法实际上更自然;例如,一个print
函数将一些输入打印到stdout
或类似的,并不自然地与任何特定对象或数据相关联。
大多数现代语言都内置了OO功能,因为它是一种功能多样且功能强大的编程范例。 Java和C#等语言鼓励所有代码以面向对象的方式编写。在这些语言中,即使像字符串和浮点这样的基本数据类型实际上也是对象,并且有自己的方法和状态。在C#中尤其如此,其中所有类型最终都从System.Object
(甚至int
和double
)继承,并继承了由此定义的所有常用方法。这称为统一类型层次结构。
mysqli
)。
答案 1 :(得分:2)
基本上,您正在研究实例方法和类/静态方法之间的区别。实例方法在类的特定实例上调用,并且它们可以访问该实例的内部状态。类/静态方法不是,也不是。
我不确定您在询问“它如何适用于PHP和... Java”时,您在寻找什么。关于实例与非实例方法,Ruby,PHP和Java的工作方式大致相同。