1

我遇到了这种非常奇怪的行为。以下代码

class TestClass {
    function testClass() {
        echo "Don't show me!";
    }
}

$testing = new TestClass;

testClass在不调用它的情况下执行它的方法!但是,testClass如果重命名为testClass1. 这种行为背后是否有任何隐藏的“PHP魔法”?

编辑。最后,我发现这个问题对于使用 PHP 长大的忍者来说是微不足道的。作为 PHP 的新人,我学会了使用__construct构造函数。从现代教程中仔细删除了“遗物行为”。我很高兴人们意识到这是多么可怕,更改类名并忘记更改构造函数的名称 - 真是一场噩梦!

4

2 回答 2

6

PHP5 之前,该__construct方法不用作类构造函数。相反,使用了与类同名的方法。

文档中:

为了向后兼容,如果 PHP 5 找不到__construct()给定类的函数,并且该类没有从父类继承一个函数,它将按类的名称搜索旧式构造函数。实际上,这意味着唯一会出现兼容性问题的情况是,如果该类有一个名为 __construct() 的方法,该方法用于不同的语义。

创建一个(空)构造函数(名为 的方法__construct)将阻止消息在类初始化时被回显(仅在 < PHP 5.3.3 * 中需要):

class TestClass {
    function __construct() {

    }
    function testClass() {
        echo "Don't show me!";
    }
}

* 自 PHP 5.3.3 起,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。此更改不会影响非命名空间类。

于 2013-09-29T16:20:41.430 回答
1

在旧版本的 PHP 中,与类名同名的方法被视为构造函数。

于 2013-09-29T16:21:02.483 回答