obteniendo un error fatal: usando $ this cuando no está en contexto de objetos en stemmer.php en línea 317 [duplicado

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

Pregunta

Esta pregunta ya tiene una respuesta aquí:

Estoy recibiendo un error fatal: usando $ esto cuando no está en contexto de objetos en stemmer.php en la línea 317.

En este momento estoy usando la clase Stemmer que encontré en Internet cambiar las palabras a su versión STEMMed antes de buscar coincidencias de la base de datos.

He leído todas las publicaciones relacionadas donde las personas tienen un problema similar. La diferencia es que el código que causa el error definitivamente está dentro del contexto del objeto (el siguiente código lo mostrará). La otra cosa extraña es que hay partes del código muy similares al error antes y después que no parecen causar dificultades. En diferentes momentos, la línea de error ha cambiado a algunas de estas otras líneas.

¿Alguien tiene alguna idea qué podría estar causando el problema? Estoy usando php5.1.34 si esto hace alguna diferencia.

Código que llama a la clase 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;
    }
}

Clase de Stemmer:

class Stemmer
{

...

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

...

}

Incluso cuando el error ocurre en los lugares de diferencia dentro del código, siempre parece haberlo cuando hay código que intenta llamar a otro método dentro de la misma clase. ¿Podría ser un error en PHP5 que no conozco? Cualquier consejo sería muy apreciado.

Gracias Archie

¿Fue útil?

Solución

Estás usando $ esto en un método estático.

Los métodos estáticos no tienen una instancia; Debe acceder a otras propiedades/métodos estáticos o crear una instancia dentro del método estático para trabajar.

P.ej

Stemmer::_step_1($word);

donde se declara en clase como

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

Otros consejos

Este error se acurrucó, porque stem no es una clase estática, usa $ esto. Intenta usar este código:

$Stemmer = new Stemmer;
$Stemmer->stem($word);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top