致命的なエラーの取得:stemmer.phpのオブジェクトコンテキストではない場合、$ 317 [Duplicate]を使用する

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

質問

この質問にはすでに答えがあります:

致命的なエラーが発生しています。317行のstemmer.phpのオブジェクトコンテキストではない場合に$を使用します。

現在、私はインターネットで見つけたStemmerクラスを使用して、データベースを一致する前に単語をSTEMMEDバージョンに変更しています。

私は、人々が同様の問題を抱えている関連するすべての投稿を読みました。違いは、エラーを引き起こすコードが間違いなくオブジェクトコンテキスト内にあることです(以下のコードにはそれが表示されます)。もう1つの奇妙なことは、コードの一部がエラーの前後に非常に類似していることは、困難を引き起こさないように見えることです。異なる時点で、エラーラインはこれらの他のラインのいくつかに変更されました。

誰かが問題を引き起こしている可能性のあるアイデアを持っていますか?これが違いを生む場合、私は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;
    }
}

STEMMERクラス:

class Stemmer
{

...

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

...

}

コード内の差異の場所でエラーが発生した場合でも、同じクラス内の別のメソッドを呼び出そうとするコードがある場合は常にそうです。これは私が知らないPHP5のバグでしょうか?どんなアドバイスでも最も高く評価されます。

アーチーに感謝します

役に立ちましたか?

解決

これを静的方法で使用しています。

静的メソッドにはインスタンスがありません。他の静的プロパティ/メソッドにアクセスするか、静的メソッド内のインスタンスを作成する必要があります。

例えば

Stemmer::_step_1($word);

クラスで宣言された場所

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

他のヒント

このエラーが発生したためです stem 静的クラスではありません。彼はこれを使用しています。このコードを使用してみてください。

$Stemmer = new Stemmer;
$Stemmer->stem($word);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top