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