3

致命的なエラーが発生します:317行目のStemmer.phpのオブジェクトコンテキストにないときに$thisを使用します。

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

私は人々が同様の問題を抱えているすべての関連する投稿を読みました。違いは、エラーの原因となっているコードが間違いなくオブジェクトコンテキスト内にあることです(以下のコードはそれを示しています)。もう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;
    }
}

ステマークラス:

class Stemmer
{

...

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

...

}

コード内の異なる場所でエラーが発生した場合でも、同じクラス内で別のメソッドを呼び出そうとしているコードがある場合は常にそうであるように見えます。これは私が気付いていないphp5のバグでしょうか?任意のアドバイスをいただければ幸いです。

ありがとうアーチー

4

2 に答える 2

6

静的メソッドで$thisを使用します。

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

例えば

Stemmer::_step_1($word);

クラスで宣言されている場所

public static function _step_1($var) { [...] }
于 2010-09-02T14:51:50.213 に答える
2

は静的クラスではないため、このエラーが発生しましstemた。彼は $this を使用しています。このコードを使用してみてください:

$Stemmer = new Stemmer;
$Stemmer->stem($word);
于 2010-09-02T14:55:46.910 に答える