Ваш коллега действительно пытается применить дизайн по контракту (DbC) на языке Eiffel на основе книги: Object Oriented Software Construction, 2nd Edition.
Утверждение в том виде, в каком он его использовал, было бы {P} -частью логики Хора или тройки Хора: {P} C {Q}, где {P} - это предусловие assert (ion) s, а {Q} - постусловие assert (ion) s.
Я бы критически отнесся к советам, которые давались по поводу ошибок в функции assert в PHP. Вы не хотите использовать код с ошибками. На самом деле вам нужно, чтобы создатели PHP исправили ошибку в assert. Пока они этого не сделают, вы можете использовать assert, но с учетом его текущего состояния с ошибками.
Более того, если функция assert содержит ошибки, я предлагаю вам не использовать ее в производственном коде. Тем не менее, я рекомендую вам использовать его при разработке и тестировании кода, где это необходимо.
Наконец, если вы изучите проектирование по контракту, вы обнаружите, что есть последствия использования логических утверждений в свете объектно-ориентированного классического наследования, то есть вы никогда не должны ослаблять предусловие или постусловие. Это может быть опасно для ваших полиморфных объектов-потомков, взаимодействующих друг с другом. Пока вы не поймете, что это значит - я оставлю это в покое!
Более того - я настоятельно рекомендую разработчикам PHP провести всестороннее изучение дизайна по контракту и попытаться как можно скорее включить его в PHP! Тогда все мы можем извлечь выгоду из наличия компилятора / интерпретатора с поддержкой DbC, который справился бы с проблемами, указанными в ответах (выше):
- Правильно реализованный компилятор с поддержкой проектирования по контракту (надеюсь) не будет содержать ошибок (в отличие от текущего утверждения PHP).
- Правильно реализованный компилятор с поддержкой проектирования по контракту справится с нюансами управления полиморфной логикой утверждений за вас, вместо того, чтобы ломать голову над этим вопросом!
ПРИМЕЧАНИЕ. Даже использование if
-statement в качестве замены assert (предусловия) будет иметь ужасные последствия, если используется для усиления предусловия или ослабления постусловия. Чтобы понять, что это значит, вам нужно будет изучить дизайн по контракту, чтобы знать это! :-)
Удачи в учебе и учебе.
'isset
(строчка с кодомassert
)? Не простоisset
(без кавычек'
)?