有人可以告诉我“旧式”对象构造函数与“新式”构造函数有何不同吗?我正在学习 PHP OOP,我想知道我何时阅读旧语法与新语法,并更好地了解 OOP 在 PHP 中如何随着时间的推移而发生变化。
新风格
class aObject
{
public $name;
public function __construct($name)
{
$this->name = $name;
}
}
“旧”构造函数语法指的是 PHP4。 PHP4 的最后一个版本是在 2008 年,PHP5 的第一个版本是在 2004 年。这是旧式类和新式类的示例。
旧版(PHP4)
<?php
class MyOldClass
{
var $foo;
function MyOldClass($foo)
{
$this->foo = $foo;
}
function notAConstructor()
{
/* ... */
}
}
新功能(PHP5+)
<?php
class MyNewClass
{
var $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
public function notAConstructor()
{
/* ... */
}
}
您会在这里注意到一些事情。最重要的变化是命名构造函数的规范方式已从
ClassName()
更改为 __construct()
。这为所有类构造函数提供了相同的、可预测的名称——这是必要的便利。想象一下,您有一个名为 ParentClass
的类,有 20 个子级,每个子级都有自己的构造函数。如果您想从每个子类调用父构造函数,您可以调用 ParentClass::ParentClass()
。如果您想更改 ParentClass
的名称,则必须更改所有 20 个构造函数调用。但是,使用新方法,您只需调用 parent::__construct()
,即使父类的名称发生更改,它也始终有效。
与此更改相关,PHP5 还引入了类 destructors (
__destruct()
),该类在对象被销毁时调用(与构造函数相反)。
此类方法名称以
__
开头,如__construct()
,还有__get()
、__set()
、__call()
、__isset()
、__unset()
、__toString()
等都称为魔法方法 .
PHP5 带来了很多巨大的变化,但很大程度上试图保持与 PHP4 代码的兼容性,因此仍然允许使用旧式构造函数。
今年已发布的 PHP7 宣布旧式构造函数已正式弃用(引发
E_DEPRECATED
错误),
PHP8 将具有旧式构造函数完全删除。