拦截对已定义的PHP方法的调用

时间:2016-01-13 01:30:16

标签: php immutability value-objects

我试图创建一个Trait来制作" freezable值对象"。 (避免位置参数和伸缩构造函数。)这意味着setter可用于初始化对象,然后调用->freeze(),这使得对象不可变"。设置者仍然会在那里,但是在被叫时,他们会抛出异常。这可以通过每个setter开头的$this->assertIsWritable();调用来实现。但是我想避免这种情况(因为很容易忘记这样的电话)并自动进行检查。有没有办法拦截对已定义方法的调用?

解决方案中不可接受:

  • 破解类型提示和/或静态代码分析的方法
  • 依赖于特殊的PHP扩展

我使用的是PHP 7.0。

1 个答案:

答案 0 :(得分:1)

如果不修改运行时(使用Runkituopz等扩展,或者在加载PHP代码时对PHP代码执行源代码转换(使用流包装魔术),则无法做到这一点。