Twój współpracownik naprawdę próbuje zastosować projekt na podstawie umowy (DbC) z języka Eiffla i na podstawie książki: Object Oriented Software Construction, 2nd Edition.
Stwierdzenie, jak go użył, byłoby {P} -częścią Hoare Logic lub Hoare Triple: {P} C {Q}, gdzie {P} jest asertem (jonami) warunku wstępnego i {Q} są asercja (jon) warunku końcowego.
Chciałbym wziąć krytyczną uwagę na porady dotyczące funkcji assert w PHP zawierającej błędy. Nie chcesz używać błędnego kodu. To, czego naprawdę chcesz, to twórcy PHP, aby naprawić błąd w asercie. Dopóki tego nie zrobią, możesz używać potwierdzenia, ale używaj go, pamiętając o jego obecnym stanie błędnym.
Ponadto, jeśli funkcja assert zawiera błędy, sugeruję, aby nie używać jej w kodzie produkcyjnym. Niemniej jednak zalecam używanie go w razie potrzeby podczas programowania i testowania kodu.
Wreszcie - jeśli przeanalizujesz projekt na podstawie kontraktu, przekonasz się, że stosowanie twierdzeń boolowskich w świetle klasycznego dziedziczenia zorientowanego obiektowo - to znaczy - nigdy nie wolno osłabiać warunku wstępnego ani warunku końcowego. Może to być niebezpieczne dla twoich polimorficznych obiektów potomnych oddziałujących ze sobą. Dopóki nie zrozumiesz, co to znaczy - zostawię to w spokoju!
Co więcej - bardzo polecam twórcom PHP dokładne zbadanie projektu na zlecenie i próbę umieszczenia go w PHP jak najszybciej! Wtedy każdy z nas może skorzystać na posiadaniu kompilatora / interpretera obsługującego DbC, który poradziłby sobie z problemami wymienionymi w odpowiedziach (powyżej):
- Prawidłowo zaimplementowany kompilator obsługujący projektowanie według kontraktu byłby (miejmy nadzieję) wolny od błędów (w przeciwieństwie do obecnego assert PHP).
- Prawidłowo zaimplementowany kompilator obsługujący projektowanie według kontraktu poradziłby sobie z niuansami zarządzania polimorficzną logiką asercji, zamiast męczyć twój mózg nad tą sprawą!
UWAGA: Nawet użycie oświadczenia if
jako substytutu potwierdzenia (warunku wstępnego) będzie miało tragiczne konsekwencje, jeśli zostanie użyte do wzmocnienia warunku wstępnego lub osłabienia warunku końcowego. Aby zrozumieć, co to oznacza, musisz przestudiować projektowanie na podstawie umowy, aby wiedzieć! :-)
Miłej nauki i nauki.
'isset
(wiersz kodu zassert
)? Nie tylkoisset
(bez pojedynczego cudzysłowu'
)?