Erzielen Sie einen tödlichen Fehler: Verwenden Sie $ dies, wenn Sie nicht im Objektkontext in Stemmer.php in Zeile 317 [Duplikat

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

Frage

Diese Frage hat hier bereits eine Antwort:

Ich erhalte einen tödlichen Fehler: Verwenden Sie $ dies, wenn Sie nicht im Objektkontext in Stemmer.php in Zeile 317 sind.

Im Moment verwende ich die Stemmer -Klasse, die ich im Internet gefunden habe, um Wörter in ihre Stammversion zu ändern, bevor ich die Datenbank nach Übereinstimmungen durchsucht habe.

Ich habe alle verwandten Beiträge gelesen, in denen Menschen ein ähnliches Problem haben. Der Unterschied besteht darin, dass der Code, der den Fehler verursacht, definitiv im Objektkontext liegt (der folgende Code zeigt dies). Die andere seltsame Sache ist, dass es Teile des Codes gibt, die dem Fehler vor und danach sehr ähnlich sind, die keine Schwierigkeiten zu verursachen scheinen. Zu verschiedenen Zeiten hat sich die Fehlerzeile in einige dieser anderen Zeilen geändert.

Hat jemand irgendwelche Ideen, was das Problem verursachen könnte? Ich verwende Php5.1.34, wenn dies einen Unterschied macht.

Code, der die Stemmer -Klasse aufruft

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;
    }
}

Stemmer -Klasse:

class Stemmer
{

...

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

...

}

Selbst wenn der Fehler in Differenzstellen innerhalb des Codes auftritt, scheint es immer zu sein, wenn Code versucht, eine andere Methode innerhalb derselben Klasse aufzurufen. Könnte dies ein Fehler in PHP5 sein, den ich nicht bewusst bin? Jeder Rat wäre am meisten geschätzt.

Danke Archie

War es hilfreich?

Lösung

Sie verwenden $ dies in einer statischen Methode.

Statische Methoden haben keine Instanz; Sie müssen auf andere statische Eigenschaften/Methoden zugreifen oder eine Instanz innerhalb der statischen Methode zum Arbeiten erstellen.

Z.B

Stemmer::_step_1($word);

wo im Unterricht deklariert als

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

Andere Tipps

Dieser Fehler wurde gezwungen, weil stem ist keine statische Klasse, er verwendet $ dies. Versuchen Sie, diesen Code zu verwenden:

$Stemmer = new Stemmer;
$Stemmer->stem($word);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top