Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling static method from object array variable

In PHP you can call a class's static method from an object instance (which is contained in an array) like this:

$myArray['instanceOfMyClass']::staticMethod(); // works

But for some reason when I use the $this variable, I get a parsing error. E.g:

$this->myArray['instanceOfMyClass']::staticMethod(); // PARSING ERROR

Just to illustrate what I mean:

class MyClass{
    public static function staticMethod(){ echo "staticMethod called\n"; }
}

$myArray = array();
$myArray['instanceOfMyClass'] = new MyClass;
$myArray['instanceOfMyClass']::staticMethod(); // works

class RunCode
{
    private $myArray;

    public function __construct(){
        $this->myArray = array();
        $this->myArray['instanceOfMyClass'] = new MyClass;
        $this->myArray['instanceOfMyClass']::staticMethod(); // PARSING ERROR
    }
}

new RunCode;

Any ideas on how to get around this?

like image 390
Mark Avatar asked Jul 17 '12 09:07

Mark


Video Answer


2 Answers

You actually can use "->" to call static method:

$this->myArray['instanceOfMyClass']->staticMethod();
like image 99
Eugene Avatar answered Sep 17 '22 15:09

Eugene


This is a really interesting problem, it may even be a bug in PHP itself.

For a work around, use the KISS principle.

class RunCode
{
    private $myArray;

    public function __construct(){
        $this->myArray = array();
        $this->myArray['instanceOfMyClass'] = new MyClass;

        $instance = $this->myArray['instanceOfMyClass']
        $instance::staticMethod();
    }
}

Hope this helps!

like image 25
Sam Williams Avatar answered Sep 17 '22 15:09

Sam Williams