【问题标题】:Code not working in PHP 4代码在 PHP 4 中不起作用
【发布时间】:2010-12-01 14:21:50
【问题描述】:

我有一个 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 下它是空的。为什么?

【问题讨论】:

  • 是你对我帖子的评论,你说得对。正如我在底部提到的那样,我有点缺乏咖啡。也给人的印象是我在这里工作的测试箱是 4.x,但我想它已经升级了。 (对我来说幸运的是,所有开发都在内部进行)。此外,并不是你不能在 PHP 中做同样的事情,只是不能专门将方法装饰为静态的。好的 PHP4 演示:abing.gotdns.com/posts/2006/…

标签: php php4


【解决方案1】:

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

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

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

【讨论】:

  • 了解$this 的用法。
  • 我不认为这段代码是静态调用它。 call_user_func_array 用于调用实例上的方法,而不是类。
  • @Jani Hartikainen - 这就是它不起作用的原因,您可以按照上面列出的示例进行操作(前提是您有 php 4)
  • @ajreal,非常感谢!这帮助我解决了我被困几天的问题,顺便说一句,使代码正常工作只需将 array($GLOBALS['instance'], 'add') 更改为 array(&$GLOBALS['instance'], 'add')
  • 哦,PHP 4 对我来说已经太久了……:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-24
  • 2015-10-14
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多