现有类对象中的PHP匿名函数声明

时间:2011-06-26 11:59:21

标签: php oop

  

可能重复:
  Initialize class property with an anonymous function

我已经花了很长一段时间编写PHP,而PHP 5.3匿名函数就是其中一个在构建一些简单脚本时帮助你的东西。但是,我不明白为什么以下示例不起作用?

$db         = new PDO([..]);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->die    = function($str){ die(var_dump( $str )); };

$db->die('[..]');

毕竟,我所做的就是在PDO实例的 - > die属性上声明匿名函数。这有点让我觉得这是一个PHP错误。

3 个答案:

答案 0 :(得分:1)

将属性分配给属性不会将属性更改为函数。要执行存储在属性中的函数,必须使用__call Magic Method:

class Foo extends PDO {
    function __call($function, $args) {
        return call_user_func_array($this->{$function}, $args);
    }
}

$db         = new Foo([..]);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$db->die    = function($str){ die(var_dump( $str )); };

$db->die('[..]');

答案 1 :(得分:0)

根据这个问题的答案:php Set a anonymous function in an instance

这是设计(或设计错误)。这里提供了一些解决方法建议。

答案 2 :(得分:0)

这有效:

class Foo{
    public $bar;
}
$foo = new Foo;
$foo->bar = function(){
    echo "Hello, world\n";
};
call_user_func($foo->bar);