2013-02-13 92 views
0

爲什麼在類實例上下文中不要調用表格$this->className::staticMethod的工作,但$className::staticMethod表格的調用確實可行?如何調用存儲爲變量的類的靜態方法?

在下面的例子callDoSomething2工程,但callDoSomething不起作用(我得到一個解析器錯誤)。我使用PHP 5.3.15版本。

<?php 
class A { 
    private $className; 

    public function __construct($className) { 
     $this->className = $className; 
    } 

    public function callDoSomething() { 
     $this->className::doSomething(); 
    } 

    public function callDoSomething2() { 
     $className = $this->className; 
     $className::doSomething(); 
    } 
} 

class B { 
    public static function doSomething() { 
     echo "hello\n"; 
    } 
} 

$a = new A('B'); 
$a->doSomething(); 
+0

重複的線路使用的東西:http://stackoverflow.com/questions/2108795/dynamic-static- method-call-in-php – 2013-02-13 22:51:20

+0

請參閱http://php.net/manual/en/language.oop5.paamayim-nekudotayim.php – 2013-02-13 22:58:51

回答

1

callDoSomething2是做到這一點的一種方式,另將沿

call_user_func("{$this->className}::doSomething"); 
+0

你能否提供一個解釋爲什麼callDoSomething不起作用? PHP解析器只是不能處理? – maxenglander 2013-02-13 22:55:46

+0

是的,這是一個解析錯誤 - PHP解析器無法處理。 – sgrif 2013-02-13 23:00:36

相關問題