Php 类变量上的作用域解析运算符
我很好奇为什么在类变量上使用scope resolution操作符会导致致命的php错误,以及是否有解决方法 例如:Php 类变量上的作用域解析运算符,php,oop,Php,Oop,我很好奇为什么在类变量上使用scope resolution操作符会导致致命的php错误,以及是否有解决方法 例如: <?php class StaticTest { public static function output() { echo "Output called<br />"; } } Class Test { public $reference; public function __construct()
<?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
?>
如果您唯一关心的是代码行数和额外变量,那么以下是如何在不创建任何变量的情况下在一行中完成此操作:
call_user_func(array(get_class($test->reference), 'output'));
我认为这相当于:
$direct_reference = $test->reference;
$direct_reference::output();
PHP有各种愚蠢的“这个不能再那个”规则/错误。您只需使用一个变量。
{$test->reference}::output()代码>?当存在潜在的歧义时,大括号总是很好的…如果你尝试($test->reference)::output()
,它会起作用吗?@Eric这么说真奇怪。。。这显然更好。虽然我确实喜欢好的Paamayim Nekudoaym。好的页面标题分隔符。没有什么比一点希伯来语更能让这一天更愉快了。@Eric或哇,讨厌。虽然我喜欢横向思维,+1我也认为这很糟糕,但OP唯一的抱怨是“需要额外的代码/变量行”,我已经解决了这个问题:-P