Votre collègue tente vraiment d'appliquer la conception par contrat (DbC) à partir du langage Eiffel et basé sur le livre: Object Oriented Software Construction, 2nd Edition.
L'assertion, telle qu'il l'utilisait, serait la {P} -partie du Hoare Logic ou Hoare Triple: {P} C {Q}, où le {P} est les assertions de précondition (ion) s et {Q} sont l'affirmation (ion) post-condition s.
Je prendrais note critique des conseils donnés sur la fonctionnalité d'assert en PHP ayant des bogues. Vous ne voulez pas utiliser de code bogué. Ce que vous voulez vraiment, ce sont les fabricants de PHP pour corriger le bogue dans l'assert. Jusqu'à ce qu'ils le fassent, vous pouvez utiliser l'assert, mais en gardant à l'esprit son état de buggy actuel.
De plus, si la fonction d'assert est boguée, je vous suggère de ne pas l'utiliser dans le code de production. Néanmoins, je vous recommande de l'utiliser dans le développement et le test du code le cas échéant.
Enfin, si vous étudiez la conception par contrat, vous constaterez qu'il y a des conséquences à utiliser des assertions booléennes à la lumière de l'héritage classique orienté objet - c'est-à-dire que vous ne devez jamais affaiblir une précondition, ni affaiblir une post-condition. Cela pourrait être dangereux pour vos objets descendants polymorphes qui interagissent les uns avec les autres. Jusqu'à ce que vous compreniez ce que cela signifie - je le laisserais tranquille!
De plus, je recommande vivement aux fabricants de PHP de faire une étude approfondie de la conception par contrat et d'essayer de la mettre en PHP dès que possible! Ensuite, nous pouvons tous bénéficier d'un compilateur / interpréteur compatible DbC, qui traiterait les problèmes notés dans les réponses (ci-dessus):
- Un compilateur de conception par contrat correctement implémenté serait (espérons-le) exempt de bogues (contrairement à l'affirmation PHP actuelle).
- Un compilateur de conception par contrat correctement implémenté gérerait les nuances de la gestion de la logique d'assertion polymorphe pour vous au lieu de vous creuser la tête!
REMARQUE: Même votre utilisation d'une if
déclaration comme substitut à l'affirmation (pré-condition) subira des conséquences désastreuses si elle est utilisée pour renforcer une pré-condition ou affaiblir une post-condition. Pour comprendre ce que cela signifie, il vous faudra étudier la conception par contrat pour le savoir! :-)
Bonne étude et apprentissage.
'isset
(la ligne de code avecassert
)? Pas seulementisset
(sans le guillemet simple'
)?