我有一个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下它是空的。为什么呢?
答案 0 :(得分:3)
在 PHP 4 中,$this
似乎与PHP 5的工作方式不同。
如果托管它的方法是静态调用的,则通常不定义$ this伪变量。但是,这不是一个严格的规则:如果从另一个对象内静态调用一个方法,则定义$ this。在这种情况下,$ this的值是调用对象的值。以下示例说明了这一点: