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

标签 php oop

<分区>

Possible Duplicate:
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 错误。

最佳答案

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

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('[..]');

关于现有类对象中的 PHP 匿名函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483756/

相关文章:

python - 有条件地定义属性(使用装饰器)(例如 try/except?)

php - 移动 woocommerce 小部件价格过滤器的 slider handle 起始位置

php - 检查 Cakephp 更新是否更改了更新中的变量

php - 选择时弹出音频文件php

c++ - 如何使用包含内部类的类的实例有效地访问内部类的成员?

javascript - 使用 Javascript 进行面向对象编程 - 构造函数

php - Twitter oAuth - 请求 token

php - ob_flush() 在本地主机上工作但不在 GoDaddy 上在线

javascript - 创建一个新的JS对象实例的最有效方法

c# - 在辅助类中使用静态方法与非静态方法