无法覆盖PHP类/函数


Unable to override PHP class / function

我无法在我的本地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的答案与手册等链接。