Вопрос оператора разрешения области действия PHP - PullRequest
3 голосов
/ 02 апреля 2010

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

    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();

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

Ответы [ 4 ]

4 голосов
/ 02 апреля 2010

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

Test::output()

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

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


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


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

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

А:

Статический вызов нестатических методов генерирует предупреждение E_STRICT level.

0 голосов
/ 01 июля 2016

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

0 голосов
/ 22 января 2015

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

0 голосов
/ 02 апреля 2010

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

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

...