这个问题在这里已经有一个答案:

我遇到了致命错误:在第317行中的stemmer.php中不在对象上下文中时使用$。

目前,我使用的是在Internet上找到的Stemmer类,然后在搜索数据库以寻找匹配项之前将单词更改为其STEM版本。

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

有人有任何想法可能导致问题吗?如果有任何区别,我正在使用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