Il tuo collega sta davvero tentando di applicare il design by contract (DbC) dal linguaggio Eiffel e basato sul libro: Object Oriented Software Construction, 2nd Edition.
L'asserzione, come l'ha usata, sarebbe la parte {P} della Hoare Logic o Hoare Triple: {P} C {Q}, dove {P} è l'asserzione precondizione (ione) se {Q} sono la post-condizione asserisce (ione) s.
Vorrei prendere nota in modo critico dei consigli forniti sulla funzione di asserzione in PHP che presenta bug. Non vuoi usare un codice con bug. Quello che vuoi veramente sono i creatori di PHP per correggere il bug nell'assert. Fino a quando non lo fanno, puoi usare l'assert, ma usalo tenendo conto del suo attuale stato di bug.
Inoltre, se la funzione di asserzione è difettosa, suggerisco di non utilizzarla nel codice di produzione. Tuttavia, ti consiglio di usarlo nel codice di sviluppo e test, ove appropriato.
Infine, se si studia il design per contratto, si scoprirà che l'uso di asserzioni booleane alla luce dell'ereditarietà classica orientata agli oggetti ha delle conseguenze: non si deve mai indebolire una precondizione, né indebolire una post-condizione. Ciò potrebbe essere pericoloso per i tuoi oggetti discendenti polimorfici che interagiscono tra loro. Finché non capisci cosa significa, lo lascerei stare!
Inoltre, consiglio vivamente ai creatori di PHP di eseguire uno studio completo del design per contratto e di tentare di inserirlo in PHP il prima possibile! Quindi tutti noi possiamo trarre vantaggio dall'avere un compilatore / interprete compatibile con DbC, che gestirà i problemi indicati nelle risposte (sopra):
- Un compilatore consapevole della progettazione per contratto implementato correttamente sarebbe (si spera) privo di bug (a differenza dell'attuale asserzione PHP).
- Un compilatore consapevole della progettazione per contratto implementato correttamente gestirà le sfumature della gestione logica delle asserzioni polimorfiche per te invece di tormentarti il cervello sulla questione!
NOTA: anche il tuo utilizzo di un file if
un'affermazione come sostituto dell'asserzione (precondizione) subirà conseguenze disastrose se usata per rafforzare una precondizione o indebolire una post-condizione. Per capire cosa significa, dovrai studiare design per contratto per saperlo! :-)
Buon studio e apprendimento.
'isset
(la riga di codice conassert
)? Non soloisset
(senza virgolette singole,'
)?