Вопрос оператора разрешения области 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();
Я обычно использую этот стиль вызова объектов в отличие от стиля "новый класс", но я не могу понять, почему он не хочет работать.
4 answers
Используя это:
Test::output()
Вы вызываете свой метод как статический, а статические методы не имеют доступа к свойствам экземпляра, так как экземпляра нет.
Если вы хотите использовать свойство, вы должны создать экземпляр класса, чтобы получить объект - и вызвать методы для этого объекта.
Пара ссылок на руководство, в качестве ссылки:
- В Классы и объекты раздел -- вам действительно следует прочитать этот раздел ;-)
- Свойства
- Основы
- Статическое Ключевое слово -- Тоже интересно, для этого конкретного вопроса;-)
Цитирую последнюю страницу, на которую я ссылался:
Поскольку статические методы могут вызываться без экземпляра созданного объекта, псевдопеременная
$this
недоступен внутри метода , объявленного как статический.
И:
Вызов нестатические методы статически генерируют предупреждение уровня
E_STRICT
.
Статический вызов против вызова экземпляра. Вы захотите понять эти основные концепции ООП. Также прочтите ключевое слово static:
Вы не можете использовать $this во время статического вызова, потому что $this относится к объекту, который в вашем случае не создан.
Попробуйте Test_Core::output()
, потому что вы используете неправильное имя класса