Obtendo erro fatal: usando $ this quando não estiver no contexto do objeto no stemmer.php na linha 317 [duplicado
-
26-09-2019 - |
Pergunta
Esta pergunta já tem uma resposta aqui:
Estou recebendo um erro fatal: usando $ isso quando não estiver no contexto do objeto no Stemmer.php na linha 317.
No momento, estou usando a classe STEMMER que encontrei na Internet para alterar palavras para a versão Stemed antes de pesquisar no banco de dados por correspondências.
Eu li todas as postagens relacionadas, onde as pessoas estão tendo um problema semelhante. A diferença é que o código que causa o erro definitivamente está dentro do contexto do objeto (o código abaixo mostrará isso). A outra coisa estranha é que existem partes do código muito semelhantes ao erro antes e depois que ele não parece causar dificuldades. Em momentos diferentes, a linha de erro mudou para algumas dessas outras linhas.
Alguém tem alguma idéia do que poderia estar causando o problema. Estou usando o Php5.1.34 se isso faz alguma diferença.
Código que chama a classe 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;
}
}
Classe Stemmer:
class Stemmer
{
...
if ( strlen($word) > 2 ) {
**$word = $this->_step_1($word);**
}
...
}
Mesmo quando o erro ocorre em locais de diferença no código, sempre parece ser quando há código tentando chamar outro método dentro da mesma classe. Isso poderia ser um bug no PHP5 que eu não conheço? Qualquer conselho seria bastante apreciado.
Obrigado Archie
Solução
Você está usando $ th This em um método estático.
Métodos estáticos não têm uma instância; Você deve acessar outras propriedades/métodos estáticos ou criar uma instância no método estático para trabalhar.
Por exemplo
Stemmer::_step_1($word);
onde declarado em sala de aula como
public static function _step_1($var) { [...] }
Outras dicas
Este erro ocorreu, porque stem
não é uma classe estática, ele usa $ this. Tente usar este código:
$Stemmer = new Stemmer;
$Stemmer->stem($word);