Что не так с этим статическим методом PHP? - PullRequest
0 голосов
/ 04 июля 2011

Я объявил статический метод в классе category

public static function getPrefixFromSubCategoyId($subCategoryId) {
    $prefix = $this->fetch(array('table' => 'subCategories', 'id' => $subCategoryId));
    return $prefix[0]['prefix'];
}

Я уверен, что я использую правильный кусок кода, потому что когда я использую тот же код вне области класса с помощью следующего кода, он работаетправильно

$category = new Category($dbh);
$subCategoryId = 6;
$prefix = $category->fetch(array('table' => 'subCategories', 'id' => $subCategoryId));
echo $prefix[0]['prefix'];

но когда я инициализирую статический метод со следующим синтаксисом.

$prefix = Category::getPrefixFromSubCategoyId(4);

, это выдает мне следующую ошибку.

Fatal error: Using $this when not in object context

я что-то упустил?или я объявляю это неправильно?

спасибо ..

Ответы [ 3 ]

5 голосов
/ 04 июля 2011

статические методы являются членами класса и не связаны с объектом.Это означает, что $this просто не существует.Вы не можете использовать его в статических методах.Если fetch() тоже статический, назовите его статическим

self::fetch(/* arguments */);

Если нет, то либо getPrefixFromSubCategoyId() тоже не должно быть статическим, fetch() должно быть статическим (см. Пример выше), либо вам нужен объект

$tmp = new self;
$tmp->fetch(/* arguments */);
1 голос
/ 04 июля 2011

$this используется для получения переменных или методов экземпляра (простых членов и в основном текущего объекта, если у вас есть один, определяющий с помощью new), но когда вы хотите достичь статических переменных, вы должны использовать $self::some_varible и :: является оператором разрешения контекста.

Вы должны объявить ваши методы или переменные static, если вы хотите использовать их в static function.

1 голос
/ 04 июля 2011

$ это ссылка на текущий объект. Это не ссылка на класс. Поскольку вы используете его статически, у вас нет объекта. Вам также придется сделать статический вызов.

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