例如,我有这样的代码:
<?php
$A = array(
'echoSmth' => function(){
echo 'Smth';
}
);
$A['echoSmth'](); // 'Smth'
?>
工作正常! 但是如果$ A不仅仅是一个变量,而是一个Class方法 - 那么这不起作用:
<?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
?>
为什么不起作用?
它显示:
Parse error: syntax error, unexpected T_FUNCTION
P.S。对不起,我在调用方法时犯了一些错误,我很着急。但不管我怎么称呼。即使我只是在没有调用
的情况下声明了类,也会出现错误答案 0 :(得分:3)
据我所知,在定义类成员时你不能有任何动态,但你可以动态设置它如下所示。所以基本上,你不能这样做是因为你不能这样做: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()
中定义整个数组,包含方法(所以基本上改变你的代码)。
答案 1 :(得分:2)
我让这个工作。不知道为什么不允许直接声明。
class AA {
var $A;
public function __construct() {
$this->A = array(
'echoSmth' => function(){
echo 'Smth';
}
);
}
}
$t = new AA();
$t->A['echoSmth']();
编辑:我也首先看到并更正了$t->$a
,但我还需要移动声明以使其正常工作。
答案 2 :(得分:1)
<?php
class Bleh
{
public $f = array();
public function register( $name , $func )
{
$this->f[ $name ] = $func;
}
}
$foo = new Bleh;
$foo->register( 'bar' , function(){ echo 'foobar'; } );
$foo->f['bar']();
?>