为什么这个方法没有被要求就被调用了?

Dmi*_*sev 1 php oop methods

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

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

$testing = new TestClass;
Run Code Online (Sandbox Code Playgroud)

testClass没有被调用就执行它的方法!但是,testClass如果重命名为其他任何内容,将无法运行testClass1.这种行为背后隐藏着"PHP魔术"吗?

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

Tim*_*per 6

在PHP5之前,该__construct方法未被用作类构造函数.相反,使用了与该类同名的方法.

文档:

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

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

class TestClass {
    function __construct() {

    }
    function testClass() {
        echo "Don't show me!";
    }
}
Run Code Online (Sandbox Code Playgroud)

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