Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why is Eclipse objecting to `static::$var`?

I have the following static function in a PHP class:

static function __callStatic($method,$args){
    $called=NULL;
    if(empty(static::$collection)) static::slurp();
    if(method_exists(static::$objtype,$method)){
        foreach(static::$collection as $obj){
            $called[]= call_user_func_array(array($obj, $method), $args);
        }
    } else if (property_exists(static::$objtype,$method)){ //$method isn't a method, it's a property
        foreach(static::$collection as $obj){
            $called[]= $obj->$method;
        }
    } else if($method=='collection'){
        $called=static::$collection;
    } else {
        throw new ZException("$method does not exist");
    }
    return $called;
}

The static variables are all defined but possibly not set. The code appears to do what I want it to and throws no errors of any level. But yet my new installation of Eclipse (Helios) PDT has marked every instance of static::$var as an 'unexpected static' error. If I replace static::$var with self::$var the Eclipse error goes away- but then the code doesn't work.

How do I convince Eclipse that these are not errors?

Eclipse for PHP Developers Version: Helios Service Release 1 Build id: 20100917-0705 on 64 bit CentOS

like image 930
dnagirl Avatar asked Feb 26 '23 03:02

dnagirl


2 Answers

Late Static Binding was introduced with PHP 5.3. Check Window > Preferences > PHP > Executables and Interpreter to make sure Eclipse is using PHP 5.3.

enter image description here

like image 90
Gordon Avatar answered Mar 08 '23 01:03

Gordon


The use of static:: was introduced in PHP 5.3.

My guess would be that Eclipse is parsing according to PHP 5.2 rules. Either that, or its an oversight when they implemented the 5.3 rules in Eclipse.

Either way, you may be able to upgrade or patch Eclipse with a new rule set to get it to parse 5.3 syntax correctly.

like image 41
Spudley Avatar answered Mar 07 '23 23:03

Spudley