<?php
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$ar->a();
?>
我收到此错误 调用未定义的方法
答案 0 :(得分:3)
<强>更新强>
如果您使用的是PHP 5.3或更高版本,请查看其他答案:)
我不认为这是正确的语法,它会给你:
Parse error: syntax error, unexpected T_FUNCTION in....
您需要创建一个类,为其添加方法,使用new
关键字对其进行实例化,然后您就能够:
$ar->a();
class myclass
{
public function a()
{
echo 'TEST';
}
}
$ar = new myclass;
$ar->a(); // TEST
有关详细信息,请参阅Classes and Objects。
答案 1 :(得分:2)
匿名与否,你有一个回调函数,因此你需要处理它。 E.g:
<?php
$ar = (object) array(
'a' => function(){
echo 'TEST';
}
);
call_user_func($ar->a);
?>
答案 2 :(得分:2)
出于某种原因,似乎不像你那样运行闭包。 如果修改代码并将另一个变量设置为该函数,则可以调用它:
$ar = (object) array('a'=>function(){
echo 'TEST';
});
$a = $ar->a;
$a();
这不是解决方案。但是从我所看到的,这似乎是PHP 5.3中的一个错误或限制。
我在尝试时使用5.3.5。
答案 3 :(得分:0)
没有功能a()
,但属性a
,因此您应该通过$ar->a
来调用它。
无论如何,我认为它不会像你期望的那样工作。
修改强>
根据ÁlvaroG。Vicario的建议,您应该使用call_user_func而不是echo
来调用该函数,它将正常工作。
答案 4 :(得分:0)
或者,只是为了它的乐趣,你可以做这样的事情 -
<?php
$ar = new stdClass;
$ar->a = function($to_echo){ echo $to_echo; };
$temp = $ar->a;
//[Edit] - $ar->a("hello"); // doesn't work! php tries to match an instance method called "func" that is not defined in the original class' signature
$temp("Hey there");
call_user_func($ar->a("You still there?"));
?>