3

我收到一个致命错误:在第 317 行的 Stemmer.php 中不在对象上下文中时使用 $this。

目前,我正在使用我在互联网上找到的 Stemmer 类将单词更改为词干版本,然后再在数据库中搜索匹配项。

我已经阅读了人们遇到类似问题的所有相关帖子。不同之处在于导致错误的代码肯定在对象上下文中(下面的代码将显示这一点)。另一个奇怪的事情是,代码中的某些部分与之前和之后的错误非常相似,似乎不会造成任何困难。在不同的时间,错误行已更改为其他一些行。

有没有人有任何想法可能导致问题。如果这有什么不同,我正在使用 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 回答