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