【问题标题】:Recommended Solutions for Creating a Callback that Chains Multiple Methods and/or Properties?创建链接多个方法和/或属性的回调的推荐解决方案?
【发布时间】:2011-04-23 00:38:36
【问题描述】:

我们正在开发一个 Builder 类型的接口,它基本上构建了一个列表,用于对单个对象进行 CRUD 管理(因为我们使用 ActiveRecord 一个对象 == 一个数据库记录)。

为了灵活地为列表选项指定列值和参数,我们最初将回调参数实现为一个数组,如下所示:

'params' => array(
              'static' => $this->institution->id, 
              array(
                'method1' => array(
                                'method_name', 
                                array('arg1', 'arg2')
                             ), 
                             'prop1' => 'id')

这种解决方案在笨拙等方面存在一些明显的缺点,但它确实有效。

在同事的建议下,我们尝试实现闭包,但由于类的另一个要求,我们必须序列化类中的所有数据,我们刚刚发现这些数据不适用于闭包。闭包的语法显然要简单得多:

'params' => array(
               $this->institution->id,
               function($obj) { return $obj->method_name($arg1, $arg2)->id; }
             )

所以我的第一个问题是,是否有办法以可序列化格式(如字符串)存储闭包,然后在类被反序列化后将其转换回闭包?

或者任何人都可以提供解决此类回调问题的更好接口的建议吗?

【问题讨论】:

    标签: php callback closures php-5.3


    【解决方案1】:

    关于如何使用反射来扩展闭包来做你想做的事,有一篇优秀而详细的帖子:Extending PHP 5.3 Closures with Serialization and Reflection。也就是说,我想知道这是否比您的原始解决方案更尴尬,因为您必须改为传递对象 - 它实际上只是对其进行了稍微不同的编码,并且您最终可能会受到性能影响。

    【讨论】:

    • 这实际上是我遇到的第一个解决方案,我们最终采用了它。为了让事情变得不那么尴尬,我们只是在消费闭包的类中实现了一个检查,以便将它们转换为消费者内部的可序列化类。
    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多