Подтвердить что ты не робот

Использование $ this внутри статической функции завершается неудачно

У меня есть этот метод, который я хочу использовать $this in, но все, что я получаю: Fatal error: использование $this, если не в контексте объекта.

Как я могу заставить это работать?

public static function userNameAvailibility()
{
     $result = $this->getsomthin();
}
4b9b3361

Ответ 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:: если вам нужно вызвать функцию внутри одного класса