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



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

解决方案中不可接受:

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

我使用的是PHP 7.0。

如果不修改运行时(使用Runkit或uopz等扩展,或者在加载PHP代码时对其执行源代码转换(使用流包装魔术),这是不可能的。

相关内容

  • 没有找到相关文章

最新更新