получаю фатальную ошибку:Использование $this вне контекста объекта в Stemmer.php в строке 317 [дубликат]
-
26-09-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
Я получаю фатальную ошибку:Использование $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);