Использование $ this внутри статической функции завершается неудачно
У меня есть этот метод, который я хочу использовать $this in, но все, что я получаю: Fatal error: использование $this, если не в контексте объекта.
Как я могу заставить это работать?
public static function userNameAvailibility()
{
$result = $this->getsomthin();
}
Ответы
Ответ 1
Это правильный способ
public static function userNameAvailibility()
{
$result = self::getsomthin();
}
Используйте self::
вместо $this->
для статических методов.
Смотрите: Учебное пособие по статическим методам PHP для получения дополнительной информации:)
Ответ 2
Вы не можете использовать $this
внутри статической функции, потому что статические функции не зависят от какого-либо объекта-объекта.
Попробуйте сделать функцию не статической.
Edit:
По определению статические методы могут быть вызваны без какого-либо объекта-объекта, и поэтому в статическом методе не существует значимого использования $this
.
Ответ 3
Аксессор this
относится к текущему экземпляру класса. Поскольку статические методы не запускаются с экземпляра, использование this
запрещается. Поэтому нужно сразу вызвать метод. Статический метод не может получить доступ к чему-либо в объеме экземпляра, но получить доступ ко всему в области видимости класса вне области экземпляра.
Ответ 4
В статической функции можно вызвать только статические функции, используя self:: если ваш класс содержит нестационарную функцию, которую вы хотите использовать, вы можете объявить экземпляр того же класса и использовать его.
<?php
class some_class{
function nonStatic() {
//..... Some code ....
}
Static function isStatic(){
$someClassObject = new some_class;
$someClassObject->nonStatic();
}
}
?>
Ответ 5
Вот пример того, что происходит, когда метод класса вызывается неправильно. Вы увидите некоторые предупреждения, когда выполните этот код, но он сработает и выведет: "I'm 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, используемая в методе, который вызывается как статический метод, указывает на экземпляр класса "вызывающий". В приведенном выше примере в классе A используется свойство $this->, которое указывает на свойство объекта B.
EDIT:
Псевдопеременная $ this доступна, когда метод вызывается из контекста объекта. $ это ссылка на вызывающий объект (обычно это объект, которому принадлежит метод, но, возможно, другой объект, если метод вызывается статически из контекста вторичного объекта). PHP> Основы
Ответ 6
Жаль, что PHP не показывает достаточно описательную ошибку. Вы не можете использовать $this- > внутри статической функции, а скорее используете self:: если вам нужно вызвать функцию внутри одного класса