Код не работает в PHP 4 - PullRequest
       12

Код не работает в PHP 4

2 голосов
/ 01 декабря 2010

У меня есть 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 Ответ

3 голосов
/ 01 декабря 2010

В PHP 4 , $this, похоже, не работает так же, как PHP 5.

Псевдопеременная $ this обычно не определяется, еслиметод, в котором он размещен, вызывается статически.Однако это не является строгим правилом: $ это определяется, если метод вызывается статически из другого объекта.В этом случае значение $ this равно значению вызывающего объекта.Это показано в следующем примере:

пример: http://www.php.net/manual/en/keyword.class.php

...