【发布时间】:2013-09-29 16:17:23
【问题描述】:
我遇到了这种非常奇怪的行为。 以下代码
class TestClass {
function testClass() {
echo "Don't show me!";
}
}
$testing = new TestClass;
在没有被调用的情况下执行它的方法testClass!
但是,如果重命名为 testClass1 之类的其他名称,testClass 将不会运行。
这种行为背后是否有任何隐藏的“PHP 魔法”?
编辑。
最后,我发现这个问题对于使用 PHP 长大的忍者来说是微不足道的。作为 PHP 的新人,我学会了使用 __construct 作为构造函数。从现代教程中仔细删除了“遗物行为”。我很高兴人们意识到它是多么可怕,更改类名并忘记更改构造函数的名称 - 真是一场噩梦!
【问题讨论】:
-
一个名称为 name 作为它所属的类的方法将被视为类构造函数。
-
此方法
testClass()与类本身的名称相同。它的操作类似于__construct()方法。不过,通常最好使用__construct(),因为这样更容易阅读。 -
如果你不想调用它,添加另一个方法并将其命名为 __construct 然后类将使用 __construct 作为类构造函数,而不是与类同名的方法。
-
我们很少看到像这样好的、最少的代码示例。我很震惊:) 赞成。
-
谢谢,找到了参考php.net/manual/en/language.oop5.decon.php,虽然“从 PHP 5.3.3 开始,与命名空间类名的最后一个元素同名的方法将不再被视为构造函数。这个更改不会影响非命名空间类。”相当混乱!