PHP__construct()
用于为新创建的对象设置属性。据我了解,它不是真正的构造函数,而是一种方法。为什么?
另外 - 对于较少的 .. 不一致的语言,如 Java 或 Python,对象是否在调用构造函数之前或之后被实例化?这与 PHP 方式有何不同?
谢谢!
PHP__construct()
用于为新创建的对象设置属性。据我了解,它不是真正的构造函数,而是一种方法。为什么?
另外 - 对于较少的 .. 不一致的语言,如 Java 或 Python,对象是否在调用构造函数之前或之后被实例化?这与 PHP 方式有何不同?
谢谢!
这两种语言在调用构造函数之前都会对其进行实例化。在 Java 中,您可以访问this
, 在 Python 中self
。此外,在 Java 中,它就像一个方法,除了没有返回类型。在 Python 中,语法与方法 ( __init__
) 完全相同。
它实际上被称为魔术方法,它是自动被某些“事件”调用的方法。魔术方法是最接近PHP事件的方法。__construct在类实例化事件中由 PHP 自动调用。
与__construct
魔术方法一起使用的是__destruct魔术方法,它总是在脚本关闭时调用,即使在exit()
或die()
已被调用时也是如此。
我发现使用多个类来“玩”这些不同的魔术方法很有用,以了解这些__destruct
方法发生的顺序。
在每一种面向对象的语言中(我所知道的;我几乎不是所有这些语言的专家),在创建对象后调用构造函数来初始化对象的内容。构造函数中没有代码创建对象,或者无论如何都可以影响创建过程[1]。
(注意我不是指内存;在 C++ 和 Java 等语言中,“对象已创建”表示其字段占用的内存已分配,而在 Python 中“对象已创建”表示有一个字典可以一旦分配了对象的属性,就保存它们)
在我所知道的大多数 OO 语言中,构造函数也具有与方法极为相似的语法,并且我认为将它们视为大多数意义上的方法并没有任何概念上的困难(在 Python 中,该__init__
方法实际上是各种意义上的方法;有只是运行时系统在创建新对象后对其调用的协议)。
[1]Python还有一个特性可以让你控制对象的创建过程;但是您不使用__init__
方法(与 Java/PHP 中的构造函数最接近的特殊方法)来执行此操作,而是使用__new__
.