代码在PHP 4中不起作用

时间:2010-12-01 14:21:50

标签: php php4

我有一个PHP脚本在PHP 5中可以正常工作,但在PHP 4中没有。我已经为你做了一个小的测试用例(免责声明:我知道下面的代码可以编写得更好,但它是不是实际使用过的作品,而是展示我所说的内容的那一部分:

class Messenger {
    var $messages = '';

    function add($message) {
        $this->messages .= "$message\n";
    }
}

function add($m) {
    if (! isset($GLOBALS['instance'])) $GLOBALS['instance'] = new Messenger();
    call_user_func_array(array($GLOBALS['instance'], 'add'), array($m));
}

add("One");
add("Two");
add("Three");

var_dump($GLOBALS['instance']->messages);

在PHP 5下,messages属性包含所有3条消息,在PHP 4下它是空的。为什么呢?

1 个答案:

答案 0 :(得分:3)

PHP 4 中,$this似乎与PHP 5的工作方式不同。

  

如果托管它的方法是静态调用的,则通常不定义$ this伪变量。但是,这不是一个严格的规则:如果从另一个对象内静态调用一个方法,则定义$ this。在这种情况下,$ this的值是调用对象的值。以下示例说明了这一点:

示例:http://www.php.net/manual/en/keyword.class.php