我已经花了很长一段时间编写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错误。
答案 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);