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

Intercepting calls to defined PHP methods

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

解决方案不可接受:

我正在使用 PHP 7.0.

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