比如我有这样一段代码:
<?php
$A = array(
'echoSmth' => function(){
echo 'Smth';
}
);
$A['echoSmth'](); // 'Smth'
?>
效果很好! 但是,如果 $A 不仅仅是一个变量,而是一个类方法——那么这将不起作用:
<?php
class AA {
public $A = array(
'echoSmth' => function(){ // Parse Error here!
echo 'Smth';
}
);
}
// Fixed call:
$t = new AA();
$t->A['echoSmth']();
// no matter what call, because error occurs early - in describing of class
?>
为什么不起作用?
它显示:
解析错误:语法错误,意外的 T_FUNCTION
附言抱歉,我在调用方法时犯了一些错误,我很着急。但是不管我怎么叫。即使我只是声明类,而不调用,也会发生错误
最佳答案
据我所知,在定义类成员时你不能有任何动态,但是你可以动态地设置它,如下所示。所以基本上,您不能这样做的原因与您不能这样做的原因相同:public $A = functionname();
此外,您的调用签名不正确,我已在我的示例中修复它。
<?php
class AA {
public $A = array();
public function __construct() {
$a = function() {
echo 'Smth';
};
$this->A['echoSmth'] = $a;
}
}
$t = new AA();
$t->A['echoSmth']();
或者,您可以在 __construct()
中定义整个数组,其中包含该方法(这样基本上可以转移您的代码)。
关于php - 为什么在 php 类中用作数组项不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5842566/