Ви, колега, справді намагаєтесь застосувати дизайн за контрактом (DbC) з мови Ейфеля на основі книги: Об’єктно-орієнтована конструкція програмного забезпечення, 2-е видання.
Твердженням, яким він користувався, було б {P} -частиною логіки Хоара або потрійним Хоаром: {P} C {Q}, де {P} - це передумова твердження (іонів) і {Q} твердження (іон) після умови.
Я хотів би взяти до уваги поради щодо функції затвердження в PHP, що має помилки. Ви не хочете використовувати код помилки. Ви дійсно хочете, щоб виробники PHP виправили помилку в твердженні. Поки вони цього не роблять, ви можете використовувати твердження, але використовуйте його, пам'ятаючи про його поточний стан помилок.
Більше того, якщо функція затвердження глючить, то я пропоную вам не використовувати її у виробничому коді. Тим не менше, я рекомендую використовувати його для розробки та тестування коду, де це доречно.
Нарешті - якщо ви вивчите дизайн за контрактом, ви виявите, що використання булевих тверджень має наслідки у світлі об’єктно-орієнтованого класичного успадкування - тобто - ви ніколи не повинні послаблювати передумови і не послаблювати пост-умови. Це може бути небезпечно для ваших поліморфних об’єктів-нащадків, які взаємодіють між собою. Поки ви не зрозумієте, що це означає - я б це залишив у спокої!
Більше того - я настійно рекомендую виробникам PHP провести всебічне вивчення дизайну за контрактом і спробувати внести його в PHP якомога швидше! Тоді всі ми можемо скористатися наявністю компілятора / інтерпретатора, який обізнаний із DbC, який би вирішував проблеми, зазначені у відповідях (вище):
- Правильно реалізований компілятор, що відповідає проекту, за контрактом (сподіваємось) не матиме помилок (на відміну від поточного твердження PHP).
- Правильно впроваджений компілятор, що знає дизайн, за контрактом, впорається з нюансами поліморфного управління логікою тверджень, замість того, щоб роздумувати над цим!
ПРИМІТКА: Навіть використання if
вами -заяви як заміни твердження (передумови) зазнає страшних наслідків, якщо воно використовується для посилення передумови або послаблення пост-стану. Щоб зрозуміти, що це означає, вам потрібно буде вивчити дизайн за контрактом, щоб знати! :-)
Щасливого навчання та навчання.
'isset
(рядок коду зassert
)? Не простоisset
(без єдиної цитати'
)?