Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法重写PHP类/函数_Php_Oop_Function_Overriding - Fatal编程技术网

无法重写PHP类/函数

无法重写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

我无法在本地Ubuntu测试服务器上重写子类中的函数,但同样的代码在上传到Web服务器时会导致所需的重写

原始类别:

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构造函数,不能以这种方式重写。“不涉及构造函数。”这是错误的。Function
HandsetDetection::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();