views:

35

answers:

2

I am getting a Fatal error: Using $this when not in object context in Stemmer.php on line 317.

At the moment I am using the Stemmer class which I found on the internet to change words to their stemmed version before searching the database for matches.

I have read all the related posts where people are having a similar problem. The difference is that the code causing the error definitely is within object context (the code below will show that). The other strange thing is that there are parts of the code very similar to the error before and after it which don't seem to cause any difficulties. At different times the error line has changed to some of these other lines.

Does anyone have any ideas what could be causing the problem. I am using php5.1.34 if this makes any difference.

Code which calls the Stemmer class

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:

class Stemmer
{

...

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

...

}

Even when the error occurs in difference places within the code it always seems to be when there is code trying to call another method within the same class. Could this be a bug in php5 that I am not aware of? Any advice would be most appreciated.

Thanks Archie

+6  A: 

Your using $this in a static method.

Static methods don't have an instance; you have to access other static properties/methods or create an instance within the static method to work with.

E.g.

Stemmer::_step_1($word);

where declared in class as

public static function _step_1($var) { [...] }
pharalia
Thanks a lot Pharalia. It works perfectly now, and can't believe how quickly you answered! Cheers dude!
archiebald
Ran into it a lot when self-learning PHP OOP back at University.. that error message must be etched into my soul :S
pharalia
also self::_step_1($word); should do the trick
michael
+2  A: 

This error ocurred, because stem is not a static class, he uses $this. Try to use this code:

$Stemmer = new Stemmer;
$Stemmer->stem($word);
Alexander.Plutov