我遇到了这种非常奇怪的行为.以下代码
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作为构造函数.从现代教程中小心地删除了"遗物行为".我很高兴人们意识到这是多么可怕,改变了类名并忘记改变构造函数 - 这真是一场噩梦!
在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开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数.此更改不会影响非命名空间的类.