Я пытаюсь создать Черту, чтобы сделать «объектами замораживаемых значений». (Чтобы избежать позиционных параметров и телескопических конструкторов.) Это означает, что установщики могут использоваться для инициализации объекта, а затем ->freeze()
называется, что делает объект «неизменным». Установщики все еще будут там, но при вызове они вызовут исключение. Это может быть достигнуто с $this->assertIsWritable();
Звоните в начале каждого сеттера. Однако я хотел бы избежать этого (так как такой вызов легко забыть) и сделать эту проверку автоматически. Есть ли способ перехватывать вызовы определенных методов?
Не приемлемо в решении:
Я использую PHP 7.0.
Это невозможно без изменения среды выполнения (с использованием расширений, таких как Runkit или же uopz или выполнение преобразования исходного кода на вашем PHP-коде во время его загрузки (используя магию обертки потока).
Других решений пока нет …