Модификация класса среды выполнения PHP

Как бы вы ожидали, что «ожидаемые» будут работать? Метод может выдать только одно исключение.

Вы должны будете написать разные модульные тесты для каждого способа, который может дать сбой. Поэтому, если метод законно выбрасывает два исключения, вам нужно настроить два теста, чтобы заставить метод генерировать каждое исключение.

7
задан stelonix 20 October 2009 в 09:35
поделиться

2 ответа

Расширение RunKit может это сделать ( runkit_method_add () и т. Д. )

Однако это экспериментальное расширение, и вы уже целитесь в ногу ...

У вас есть другие варианты:

  • Эмулировать новые поля и методы с помощью __ get () и ] __ call ()
  • Использовать подклассы и шаблон Factory ( подключаемый модуль класса расширяет BaseImplementation и имеет заводской экземпляр подключаемого модуля вместо BaseImplementation ). Zend Plugin Loader делает что-то подобное.
    Это решение с наименьшими накладными расходами, но оно также ограничено одним плагином, расширяющим один класс.
  • Добавьте перехватчики и используйте делегирование (шаблон стратегии) ​​( $ this-> plugin-> onFoo () ). Для этого есть библиотека.
7
ответ дан 6 December 2019 в 23:10
поделиться

PHP этого не допускает. В других отношениях это может быть динамический язык, но система классов намеренно ограничивает. Вы можете либо установить расширение runkit , которое изменяет язык, позволяя издеваться над классами во время выполнения (но тогда вы больше не используете простой PHP), либо вы можете использовать магические методы , чтобы смоделировать его.

3
ответ дан 6 December 2019 в 23:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: