неизменность — перехват вызовов определенных методов PHP

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

Не приемлемо в решении:

  • Подходы, которые нарушают хинтинг типов и / или статический анализ кода
  • Зависимость от специальных расширений PHP

Я использую PHP 7.0.

4

Решение

Это невозможно без изменения среды выполнения (с использованием расширений, таких как Runkit или же uopz или выполнение преобразования исходного кода на вашем PHP-коде во время его загрузки (используя магию обертки потока).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]