如何确定是否为Closure :: bindTo静态定义了Closure

时间:2014-09-07 19:30:04

标签: php static closures bind php-5.4

理想情况下,我想将静态声明的闭包绑定到对象实例。但这已被问及似乎不可能?

如果失败了,我想确定是否静态定义了一个闭包,知道我是否可以bindTo()或者不... ....例如:

Class A {
  public function runClosure($closure) {
    #this is what I would like to do...
    if (! $closure->isStatic()) {
      $closure->bindTo($this, $this);
      return $closure();
    } else {
      return $closure($this);
    }
  }
}

显然,这个例子遗漏了使这个有用的所有东西,但它说明了这个概念。

如果有某种方法可以强制将一个静态声明的闭包绑定到一个对象实例,那会很棒....

==========编辑========= 我为什么要这样?好的,我正在构建一个新的PHP MVC / ORM框架。我的BaseController类有一个" ProcessPost"处理和验证已发布数据的方法,然后默认情况下将数据绑定到关联的ORM对象。但是表单除了更新表之外还有其他用途,因此ProcessPost(或表单数组)的选项是可调用的",可以在执行验证后调用已发布表单数据的自定义处理。这可以是任何可调用的,包括闭包,但在某些情况下,闭包可能需要访问控制器的成员属性,在这种情况下它应该bindTo"这个"。一个解决方法是使用另一个参数来指定" bindTo"不是,但那没有吸引力。看起来他们应该是某种测试方式" is_bindable($ myClosure)"是合情合理的。

0 个答案:

没有答案