无法重写PHP类/函数
我无法在本地Ubuntu测试服务器上重写子类中的函数,但同样的代码在上传到Web服务器时会导致所需的重写 原始类别:无法重写PHP类/函数,php,oop,function,overriding,Php,Oop,Function,Overriding,我无法在本地Ubuntu测试服务器上重写子类中的函数,但同样的代码在上传到Web服务器时会导致所需的重写 原始类别: class HandsetDetection { function HandsetDetection() { //code I wish to replace } } 我的班级: class HandsetDetection_RespondHD extends HandsetDetection { function HandsetDete
class HandsetDetection {
function HandsetDetection() {
//code I wish to replace
}
}
我的班级:
class HandsetDetection_RespondHD extends HandsetDetection {
function HandsetDetection() {
//code I wish to use
}
}
构造器没有参与
在我的本地机器上使用的PHP版本是PHP5.3.3-1ubuntu9.5,带有Suhosin补丁(cli)(构建时间:2011年5月3日00:48:48)
成功覆盖的Web服务器上的PHP版本为5.2.17
你能想想为什么会这样吗?我认为这与类与方法同名这一事实有关 这是php4风格 只要该类不在仍然是一个问题的命名空间中 为了向后兼容,如果PHP5找不到给定类的_construct()函数,它将根据类的名称搜索旧式构造函数。实际上,这意味着唯一存在兼容性问题的情况是,该类有一个名为_construct()的方法,该方法用于不同的语义
例子:
将输出
“override”
替换HandsetDetection()
/通过赋予扩展类a构造函数方法()防止调用它:
除非你告诉我们“不工作”的意思。正如edorian所说,它被视为PHP4构造函数,不能以这种方式重写。“不涉及构造函数。”这是错误的。FunctionHandsetDetection::HandsetDetection
是PHP4风格的构造函数。请参阅:函数名=类名。@David Oliver:您需要为扩展类提供另一个方法,事情应该会按照您的需要进行,请参阅。
<?php
class A {
function A() {
echo "construct";
}
}
class B extends A {
function A() {
echo "override";
}
}
$x = new B();
$x->A();
<?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();