получаю фатальную ошибку:Использование $this вне контекста объекта в Stemmer.php в строке 317 [дубликат]

StackOverflow https://stackoverflow.com/questions/3628278

Вопрос

На этот вопрос уже есть ответ здесь:

Я получаю фатальную ошибку:Использование $this вне контекста объекта в Stemmer.php в строке 317.

В настоящий момент я использую класс Stemmer, который я нашел в Интернете, чтобы изменить слова на их основную версию перед поиском совпадений в базе данных.

Я прочитал все похожие сообщения, где у людей возникла подобная проблема.Разница в том, что код, вызывающий ошибку, определенно находится в контексте объекта (код ниже это покажет).Другая странность заключается в том, что есть части кода, очень похожие на ошибку до и после нее, которые, похоже, не вызывают никаких затруднений.В разное время строка ошибки менялась на некоторые из этих других строк.

Есть ли у кого-нибудь идеи, что может быть причиной проблемы.Я использую php5.1.34, если это имеет какое-то значение.

Код, вызывающий класс Stemmer

if (isset($search) && $search != "") {
    $filtered_words = WordFilter::filter($search);

    foreach($filtered_words as $word) {
        if(strlen($word) <= 2) {
            continue;
        }
        $w = Stemmer::stem($word);
        $stemmed_words[] = $w;
    }
}

Класс Стеммера:

class Stemmer
{

...

    if ( strlen($word) > 2 ) {
        **$word = $this->_step_1($word);**
    }

...

}

Даже когда ошибка возникает в разных местах кода, всегда кажется, что код пытается вызвать другой метод в том же классе.Может ли это быть ошибка в php5, о которой я не знаю?Любой совет будет очень признателен.

Спасибо Арчи

Это было полезно?

Решение

Вы используете $this в статическом методе.

Статические методы не имеют экземпляра;вам необходимо получить доступ к другим статическим свойствам/методам или создать экземпляр внутри статического метода для работы.

Например.

Stemmer::_step_1($word);

где объявлено в классе как

public static function _step_1($var) { [...] }

Другие советы

Эта ошибка произошла, потому что stem не статический класс, он использует $this.Попробуйте использовать этот код:

$Stemmer = new Stemmer;
$Stemmer->stem($word);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top