为什么 PHP 构造函数是一个方法


Why is the PHP constructor a method?

PHP 使用__construct()为新创建的对象设置属性。据我了解,它不是一个真正的构造函数,而是一个方法。为什么?

另外 - 对于更少的..不一致的语言,如Java或Python,对象是在调用构造函数之前还是之后被实例化?这与PHP的方式有何不同?

谢谢!

这两种

语言在调用构造函数之前都会实例化它。 在Java中,你可以访问this,在Python self。 此外,在 Java 中,它就像一个方法,只是没有返回类型。 在 Python 中,语法正好是一个方法(__init__ )。

它实际上被称为魔术方法,这是自动调用某些"事件"的方法。魔术方法是最接近PHP的事件。__construct由 PHP 在类实例化事件上自动调用。

__construct魔术方法一起的是__destruct魔术方法,它总是在脚本关闭时调用,即使调用了exit()die()

我发现"玩"这些不同的魔法方法,使用多个类,以了解__destruct方法发生的顺序很有用。

在每种面向对象的语言中(我知道;我几乎不是所有这些方面的专家),在创建对象调用构造函数以初始化对象的内容。构造函数中没有代码创建对象,或者无论如何都不会影响创建过程[1]。

(注意我不是指内存;在C++和Java等语言中,"对象已被创建"意味着其字段占用的内存已被分配,而在Python中,"对象已被创建"意味着有一个字典,一旦分配了对象的属性,它就会保存它们)

我所知道的大多数面向对象语言中,构造函数的语法也与方法非常相似,而且我认为将它们视为大多数意义上的方法没有任何概念上的困难(在 Python 中,__init__ 方法实际上是一种从任何意义上讲都是方法;只有一个协议,运行时系统在新对象创建后在它们上调用它)。


[1]Python 还有一个功能,可以让你控制对象创建过程;但你不会使用 __init__ 方法(与 Java/PHP 的构造函数最接近的特殊方法)来做到这一点,而是使用 __new__ 方法。