Erzielen Sie einen tödlichen Fehler: Verwenden Sie $ dies, wenn Sie nicht im Objektkontext in Stemmer.php in Zeile 317 [Duplikat
-
26-09-2019 - |
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
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);