Использование этого внутри статической функции не удается - PullRequest
60 голосов
/ 18 февраля 2010

У меня есть этот метод, в котором я хочу использовать $ this, но все, что я получаю, это: Неустранимая ошибка: использование $ this, когда не в контексте объекта.

Как мне заставить это работать?

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

Ответы [ 6 ]

110 голосов
/ 18 февраля 2010

Это правильный путь

public static function userNameAvailibility()
{
     $result = self::getsomthin();
}

Используйте self:: вместо $this-> для статических методов .

См. Учебник по статическим методам PHP для получения дополнительной информации:)

12 голосов
/ 18 февраля 2010

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

Редактировать : По определению статические методы могут быть вызваны без какого-либо созданного объекта, и, следовательно, нет никакого смысла в использовании $this внутри статического метода.

2 голосов
/ 02 октября 2013

Только статические функции могут быть вызваны внутри статической функции с помощью self :: если ваш класс содержит нестатическую функцию, которую вы хотите использовать, вы можете объявить экземпляр того же класса и использовать его.

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>
2 голосов
/ 18 февраля 2010

Метод доступа this относится к текущему экземпляру класса. Поскольку статические методы не запускаются из экземпляра, использование this запрещено. Поэтому нужно вызывать метод прямо здесь. Статический метод не может получить доступ к чему-либо в области действия экземпляра, но может получить доступ ко всему в области действия класса вне области действия экземпляра.

1 голос
/ 17 мая 2017

Вот пример того, что происходит, когда метод класса вызывается неправильно. Вы увидите некоторые предупреждения, когда выполните этот код, но он сработает и выведет: «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> Основы

0 голосов
/ 16 февраля 2017

Жаль, что PHP не показывает достаточно описательную ошибку. Вы не можете использовать $ this-> внутри статической функции, но лучше использовать self ::, если вам нужно вызвать функцию внутри того же класса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...