我遇到了这种非常奇怪的行为。 以下代码
class TestClass {
function testClass() {
echo "Don't show me!";
}
}
$testing = new TestClass;
执行方法testClass
而不调用它!
但是,如果重命名为testClass
之类的其他内容,则testClass1
将无法运行。
这种行为背后隐藏着“PHP魔术”吗?
EDIT。
最后,我看到这个问题对于使用PHP长大的忍者来说是微不足道的。作为最近的PHP新手,我学会了使用__construct
作为构造函数。从现代教程中小心地删除了“遗物行为”。我很高兴人们意识到这是多么可怕,改变了类名并忘记改变构造函数 - 这真是一场噩梦!
答案 0 :(得分:6)
在PHP5之前,__construct
方法未用作类构造函数。相反,使用了与该类同名的方法。
为了向后兼容,如果PHP 5找不到给定类的
__construct()
函数,并且该类没有从父类继承一个函数,它将按名称搜索旧式构造函数班上的。实际上,这意味着唯一具有兼容性问题的情况是该类是否有一个名为__construct()的方法,该方法用于不同的语义。
创建一个(空)构造函数(名为__construct
的方法)将阻止消息在类初始化时被回显(只有< PHP 5.3.3 *才需要):
class TestClass {
function __construct() {
}
function testClass() {
echo "Don't show me!";
}
}
* As of PHP 5.3.3,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。此更改不会影响非命名空间的类。
答案 1 :(得分:1)
在旧版本的PHP中,与类名同名的方法被视为构造函数。