这个php语法有效吗$类->;{';某事';}()


Is this php syntax valid? $class->{'something'}()

我正在阅读某个代码示例,注意到一个我不熟悉的语法

$response = $controller->{'home'}();

这是有效的php语法吗?

是。

$controller->{'home'}
// same as 
$controller->home 
// used to access a property

$controller->{'home'}()
// same as 
$controller->home()
// used to call a method

主要好处是,通过调用->{stuff},您可以访问具有不同(或奇怪)名称的属性。

示例:

$a = new stdClass();
$a->{'@4'} = 4;
print_r($a);
// stdClass Object
// (
//    [@4] => 4
// )

你不能做$a->@4,但可以做$a->{'@4'}

例如,请参见以下内容:https://3v4l.org/PaOF1

是的。它的酷之处在于,您可以根据存储在变量中的值调用对象的方法:

$whatToExecute = 'home';
$response = $controller->{$whatToExecute}();

祝你好运!!