У меня есть этот метод, который я хочу использовать $ this in, но все, что я получаю: Fatal error: использование $ this, если не в контексте объекта.
Как я могу заставить это работать?
public static function userNameAvailibility() { $result = $this->getsomthin(); }
Это правильный способ
public static function userNameAvailibility() { $result = self::getsomthin(); }
Используйте self::
вместо $this->
для статических методов .
См.: Статические методы PHP. Учебное пособие для получения дополнительной информации. 🙂
Вы не можете использовать $this
внутри статической функции, потому что статические функции не зависят от какого-либо объекта-объекта. Попробуйте сделать функцию не статической.
Редактирование . По определению статические методы могут быть вызваны без какого-либо созданного объекта, и, следовательно, не существует значимого использования $this
внутри статического метода.
Аксессор this
относится к текущему экземпляру класса. Поскольку статические методы не запускаются из экземпляра, использование this
запрещается. Поэтому нужно сразу вызвать метод. Статический метод не может получить доступ к чему-либо в области экземпляра, но получить доступ ко всему в области видимости класса вне области экземпляра.
В статической функции можно вызвать только статические функции, используя self :: если ваш класс содержит нестационарную функцию, которую вы хотите использовать, вы можете объявить экземпляр того же класса и использовать его.
<?php class some_class{ function nonStatic() { //..... Some code .... } Static function isStatic(){ $someClassObject = new some_class; $someClassObject->nonStatic(); } } ?>
Вот пример того, что происходит, когда метод класса вызывается неправильным образом. Вы увидите некоторые предупреждения при выполнении этого кода, но он будет работать и будет печатать: «Я A: печать свойства B». (Выполнено в php5.6)
class A { public function aMethod() { echo "I'm A: "; echo "printing " . $this->property; } } class B { public $property = "B property"; public function bMethod() { A::aMethod(); } } $b = new B(); $b->bMethod();
Это означает, что переменная $ this, используемая в методе, который вызывается как статический метод, указывает на экземпляр класса «вызывающий». В приведенном выше примере существует свойство $ this->, используемое в классе A, которое указывает на свойство B.
Жаль, PHP не показывает достаточно описательную ошибку. Вы не можете использовать $ this-> внутри статической функции, а скорее используете self :: если вам нужно вызвать функцию внутри одного класса