代码在PHP4中不起作用

代码在PHP4中不起作用,php,php4,Php,Php4,我有一个PHP脚本,它在PHP5中运行良好,但在PHP4中运行不好。我制作了一个小测试用例供您演示(免责声明:我知道下面的代码可以编写得更好,但它不是实际使用的代码,而是演示我所说内容的代码): 在PHP5下,messages属性包含所有3条消息,在PHP4下为空。为什么?在PHP4中,$this似乎与PHP5的工作方式不同 如果静态调用$this伪变量所在的方法,则通常不定义该伪变量。然而,这不是一个严格的规则:$如果从另一个对象中静态调用一个方法,则定义此规则。在本例中,$this的值是调用

我有一个PHP脚本,它在PHP5中运行良好,但在PHP4中运行不好。我制作了一个小测试用例供您演示(免责声明:我知道下面的代码可以编写得更好,但它不是实际使用的代码,而是演示我所说内容的代码):


在PHP5下,
messages
属性包含所有3条消息,在PHP4下为空。为什么?

PHP4中,
$this
似乎与PHP5的工作方式不同

如果静态调用$this伪变量所在的方法,则通常不定义该伪变量。然而,这不是一个严格的规则:$如果从另一个对象中静态调用一个方法,则定义此规则。在本例中,$this的值是调用对象的值。以下示例对此进行了说明:


示例:

点击捕捉
$this
用法。我认为这段代码不是静态调用它。call_user_func_数组用于调用实例上的方法,而不是类。@Jani Hartikainen-这就是它不起作用的原因,您可以按照上面列出的示例(如果您有php 4)@ajreal,非常感谢!这帮助我解决了一个我坚持了几天的问题,顺便说一句,让代码正常工作仅仅是将
array($GLOBALS['instance'],'add')
更改为
array(&$GLOBALS['instance'],'add')
对我来说,从PHP4开始似乎太久了……:你在我的帖子上的评论,你完全正确。正如我在底部提到的,我有点缺乏咖啡。我在这里工作时的测试箱是4.x,但我想它已经升级了。(幸运的是,所有的开发都是在内部进行的)。而且,这并不是说你不能在PHP中做同样的事情,只是不能具体地将方法修饰成静态的。好的PHP4演示:
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);