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

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

解决方案中不可接受:

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

我正在使用PHP 7.0.

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

点赞