5
<?php
$ar = (object) array('a'=>function(){
   echo 'TEST';
});
$ar->a();
?>

我收到此错误调用未定义的方法

4

5 回答 5

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

有关详细信息,请参阅类和对象

于 2012-04-10T09:51:11.153 回答
2

匿名与否,你有一个回调函数,因此你需要这样处理它。例如:

<?php

$ar = (object) array(
    'a' => function(){
        echo 'TEST';
    }
);

call_user_func($ar->a);

?>
于 2012-04-10T09:57:57.393 回答
2

由于某种原因,它似乎不可能像您那样运行关闭。如果您修改代码并为函数设置另一个变量,则可以调用它:

$ar = (object) array('a'=>function(){
   echo 'TEST';
});
$a = $ar->a;
$a();

这不是解决办法。但据我所知,这似乎是 PHP 5.3 中的一个错误或限制。

我在尝试这个时使用的是 5.3.5。

于 2012-04-10T09:59:52.377 回答
0

没有函数a(),只有属性a,所以你应该调用它$ar->a
无论如何,我认为它不会像你期望的那样工作。

编辑: 正如 Álvaro G. Vicario 所建议的,您应该使用call_user_func,而不是echo调用该函数,它会正常工作。

于 2012-04-10T09:53:52.520 回答
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?"));
?>
于 2012-04-10T09:57:39.930 回答