为什么函数在PHP类数组项不起作用
例如,我有这样的代码:为什么函数在PHP类数组项不起作用
<?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
?>
为什么它不工作? 它显示: Parse error: syntax error, unexpected T_FUNCTION
P.S.对不起,我用我称呼该方法的方式犯了一些错误,我很着急。但不管我怎么打电话。错误ocurrs,即使我只是声明类,而不致电
据我所知,在定义一个类成员时你不能有动态的东西,但是你可以像下面那样动态地设置它。所以基本上,你不能这样做,因为你不能这样做: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()
限定整个阵列,包含方法(因此基本上移动您的代码)。
我得到了这个工作。不知道为什么不允许直接声明。
class AA {
var $A;
public function __construct() {
$this->A = array(
'echoSmth' => function(){
echo 'Smth';
}
);
}
}
$t = new AA();
$t->A['echoSmth']();
编辑:我也看到和纠正$t->$a
第一,但我需要移动的声明,以及使其工作。
他有一个错误,他使用$ t - > $ a而不是$ t-> a。你的代码是正确的,OP没有。这里没有php问题,只是在访问成员时出现一个简单的错误。 – 2011-04-30 15:07:35
@Michael错误,在定义$ A的值时定义闭包存在解析错误(但是,那是一个错误)。 – 2011-04-30 15:08:23
这也是真的rudi,我撇开了课堂,并假设他确实没有解析错误 - 显然,你不能相信任何人这些天,谢谢指出:) – 2011-04-30 15:10:14
好,它还挺工作...
<?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']();
?>
尝试T- $>一[ 'echoSmth']();没有美元符号 – usoban 2011-04-30 15:04:46
@usoban:a大写。 – 2011-04-30 15:09:23
@marcel对,我在看最后一行,其中a是小写。我的坏:) – usoban 2011-04-30 15:11:59