2012-06-30 50 views
3

我很好奇为什么在类变量上使用范围解析运算符会导致致命的php错误,以及是否存在解决方法。有关类变量的范围解析运算符

例如:

<?php 
class StaticTest 
{ 
    public static function output() 
    { 
     echo "Output called<br />"; 
    } 
} 
Class Test 
{ 
    public $reference; 

    public function __construct() 
    { 
     $this -> reference = new StaticTest; 
    } 

} 

$static_test = new StaticTest; 
$static_test::output(); //works as intended 

$test = new Test; 
$test -> reference::output(); //Unexpcted T_PAAMAYIM_NEKUDOTAYIM 

$direct_reference = $test -> reference; 
$direct_reference::output(); //works, closest solution i have found, but requires the extra line of code/variable 
?> 
+2

PHP有百般无聊的规则/臭虫“这一点,以后不能去”。你只需要使用一个变量。 – Ryan

+0

'{$ test - > reference} :: output();'?大括号总是很好,当有潜在的歧义... – DaveRandom

+0

它工作,如果你尝试'($测试 - >参考)::输出()'? – secretformula

回答

3

如果你唯一关心的是代码和额外的变量的行数,这里是你如何能做到这一条线,而不会产生任何变量:

call_user_func(array(get_class($test->reference), 'output')); 

其中,我相信,就相当于:

$direct_reference = $test->reference; 
$direct_reference::output(); 
+0

哇,讨厌。我喜欢横向思维,+1 – DaveRandom

+0

我认为它也很讨厌,但是OP对此的唯一抱怨是“需要额外的代码/变量”,我已经解决了这个问题:-P –