旧式和新式 PHP 构造函数的区别

问题描述 投票:0回答:1

有人可以告诉我“旧式”对象构造函数与“新式”构造函数有何不同吗?我正在学习 PHP OOP,我想知道我何时阅读旧语法与新语法,并更好地了解 OOP 在 PHP 中如何随着时间的推移而发生变化。

新风格

class aObject
{
    public $name;

    public function __construct($name)
    {
        $this->name = $name;
    }
}
php oop php4
1个回答
13
投票

“旧”构造函数语法指的是 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 将具有旧式构造函数完全删除

© www.soinside.com 2019 - 2024. All rights reserved.