Вопрос оператора разрешения области PHP


У меня проблемы со стилем вызова методов MyClass::function();, и я не могу понять, почему. Вот пример (кстати, я использую фреймворк Kohana):

    class Test_Core
 {
  public $var1 = "lots of testing";

  public function output()
   {
    $print_out = $this->var1;
    echo $print_out;
   }
 }

Я пытаюсь вызвать его следующим образом, но он возвращает $var1 как неопределенный:

Test::output()

Однако это прекрасно работает:

  $test = new Test(); 
  $test->output();

Я обычно использую этот стиль вызова объектов в отличие от стиля "новый класс", но я не могу понять, почему он не хочет работать.

Author: Ayman Hourieh, 2010-04-02

4 answers

Используя это:

Test::output()

Вы вызываете свой метод как статический, а статические методы не имеют доступа к свойствам экземпляра, так как экземпляра нет.

Если вы хотите использовать свойство, вы должны создать экземпляр класса, чтобы получить объект - и вызвать методы для этого объекта.


Пара ссылок на руководство, в качестве ссылки:


Цитирую последнюю страницу, на которую я ссылался:

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

И:

Вызов нестатические методы статически генерируют предупреждение уровня E_STRICT.

 4
Author: Pascal MARTIN, 2010-04-02 18:25:34

Статический вызов против вызова экземпляра. Вы захотите понять эти основные концепции ООП. Также прочтите ключевое слово static:

Http://www.php.net/manual/en/language.oop5.static.php

 0
Author: webbiedave, 2010-04-02 18:25:12

Вы не можете использовать $this во время статического вызова, потому что $this относится к объекту, который в вашем случае не создан.

 0
Author: Davinder Kumar, 2016-07-01 08:50:01

Попробуйте Test_Core::output(), потому что вы используете неправильное имя класса

 -1
Author: Pankaj Cheema, 2015-01-22 15:56:36