我无法在我的本地Ubuntu测试LAMP服务器上覆盖子类中的函数,但是相同的代码在上传到web服务器时导致所需的覆盖。
原始类:
class HandsetDetection {
function HandsetDetection() {
//code I wish to replace
}
}
我的类:
class HandsetDetection_RespondHD extends HandsetDetection {
function HandsetDetection() {
//code I wish to use
}
}
我本地机器上使用的PHP版本是PHP 5.3.3-1ubuntu9.5 with suhoin - patch (cli) (build: May 3 2011 00:48:48)
重载成功的web服务器的PHP版本为5.2.17
你能想到这是为什么吗?
我认为这与类与方法具有相同的名称有关。
这是一个php4风格的构造函数
只要类不在命名空间中,这仍然是一个问题。
为了向后兼容,如果PHP 5找不到给定类的__construct()函数,它将根据类的名称搜索旧式构造函数。实际上,这意味着有兼容性问题的唯一情况是类有一个名为__construct()的方法,该方法用于不同的语义。
例子:
<?php
class A {
function A() {
echo "construct";
}
}
class B extends A {
function A() {
echo "override";
}
}
$x = new B();
这将输出"construct"
现在打电话
$x->A();
将输出"override"
替换HandsetDetection()
/通过给扩展类一个构造方法(Demo)来防止它被调用:
<?php
class A {
function A() {
echo "A() constructor'n";
}
}
class B extends A {
function __construct() {
echo 'B() constructor', "'n";
}
function A() {
echo "override'n";
}
}
$x = new B();
那么事情应该会好转。有关背景信息的解释,请参阅@edorians的答案与手册等链接。