PHP: Как $ эта переменная внутри одного класса может быть объектом другого? - PullRequest
6 голосов
/ 21 января 2011

Вот пример:

class Test {

    public function TestMethod() {

        print_r($this); // Gives me "Test1 Object ( )"

    }
}

class Test1 {

    public function Test1Method() {

        Test::TestMethod();

    }
}

$test1 = new Test1;
$test1->Test1Method();

Я нахожу это странным.Может кто-нибудь объяснить мне, почему это происходит?

Ответы [ 3 ]

7 голосов
/ 21 января 2011

С http://www.php.net/manual/en/language.oop5.basic.php:

Псевдопеременная $this доступна, когда метод вызывается из контекста объекта.$this является ссылкой на вызывающий объект (обычно это объект, которому принадлежит метод, но, возможно, другой объект, если метод вызывается статически из контекста вторичного объекта).

Thisне обязательно имеет большой смысл, и вызовет предупреждение, если E_STRICT включен.

4 голосов
/ 21 января 2011

Краткий ответ: Вы вызываете «нестатический» метод с использованием статического вызова функции, затем php пытается найти «$ this», а последний действительный «$ this» был тот, что в Test1.

Если вы включите E_STRICT, сообщая об ошибке, он будет жаловаться на это.

0 голосов
/ 21 января 2011

Это поздняя статическая привязка , если я не ошибаюсь, что может быть как поздняя пятница.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...