2016-01-13 142 views
4

我试图创建一个特性来制作“可冻结值对象”。 (为了避免位置参数和伸缩构造函数)。这意味着setters可以用来初始化对象,然后调用->freeze(),这使得对象“不可变”。二传手仍然会在那里,但是当被召唤时,他们会抛出异常。这可以通过在每个设置者开始时拨打$this->assertIsWritable();来实现。不过,我想避免这种情况(因为它很容易忘记这样的呼叫),并自动进行检查。有没有办法拦截调用定义的方法?拦截调用定义的PHP方法

在溶液不接受:

  • 接近于打破类型提示和/或静态代码分析在特殊的PHP扩展
  • 依赖

我使用PHP 7.0。

+1

东西可能?可能[ 'method_redefine'](http://php.net/manual/en/function.runkit-method-redefine.php)。我不知道你有什么办法可以做到这一点。 –

回答

1

这是不可能的,而不(使用流封包魔法)修改所述运行时(使用附加信息如Runkituopz或它被加载,而在PHP代码执行源代码转换。在runkit