Vous n'êtes pas identifié(e).
Bonjour à tous,
Je suis en train d'étudier la façon de faire des applications en ligne zend framework et je suis tombé sur une ligne de code que je n'arrive pas à comprendre :
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Je ne vois pas l'utilité de la fonction defined ici vu qu'il n'y a pas de test avec un if.
Pour moi defined renvoie true et le define définit la constante. Je ne vois pas l'intérêt de coupler les deux avec un opérateur logique "et".
Quelqu'un a-t'il le secret de cette instruction ?
Mes tutoriels vidéo gratuits en ligne :
http://www.enseignement-en-ligne.com/
Hors ligne
Ce n'est pas un opérateur ET(&&) mais OU(||) !
Ce test vérifie que la constante existe, si elle n'existe pas on passe dans le OR et donc on la créé, la création renvoyant toujours true cela fini le test.
Hors ligne
Oui, pardon c'est un "ou", je devais être fatigué
@xTG, avec ton aide et le php manual, je pense avoir compris la chose suivante.
Déjà à priori, comme je le pensais, il n'y a pas de test (au sens habituel) car il n'y a pas de if ni d'opérateur ternaire (if avec le ?).
Je pense avoir compris maintenant en regardant la page ici :
http://www.php.net/manual/fr/language.o … ogical.php qui indique :
$a || $b Or (Ou) TRUE si $a OU $b est TRUE.
et surtout, mes cours d'automatisme sont revenus donc j'ai reconsulté la table de vérité d'un "ou" ici :
http://fr.wikipedia.org/wiki/Table_de_v%C3%A9rit%C3%A9
A partir de là, j'ai essayé de raisonner en terme de "compilateur".
Quand le compilateur évalue
$a||$b, il commence par évaluer la valeur de $a. Si $a vaut 1, il ne va pas plus loin pour ne pas perdre de temps (les compilateurs sont optimisés) et n'évalue pas le $b car il sait déjà que l'ensemble fait 1 (quelquesoit la valeur de $b).
Maintenant, si $a vaut 0, il évalue $b pour voir si l'ensemble ($a||$b) fait 1 (true) ou 0 (false);
En résumé, si defined('APPLICATION_PATH') c'est à dire si la constante est définie (donc à 0 ou true), le compilateur ne s'occupe pas de la deuxième expression jusqu'au ";" et passe à la ligne suivante.
Si defined('APPLICATION_PATH') est à false, le compilateur évalue et donc exécute la deuxième instruction qui est define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
Pour résumé : si "APPLICATION_PATH" est définie, on ne la redéfinit pas. Sinon on la définit !!
Cela dit, beaucoup de monde s'accorde à dire que ce code, au demeurant très pratique, est très "compliqué à comprendre" quand on a pas eu les éclaircissements et que l'on a pas une vision "compilateur".
Vais pas me laisser impressionner par quelques lignes de code du team zend !! Non mais !!:P
Vous me dites si je me trompe !!
Mes tutoriels vidéo gratuits en ligne :
http://www.enseignement-en-ligne.com/
Hors ligne
Saluton,
Cela dit, beaucoup de monde s'accorde à dire que ce code, au demeurant très pratique, est très "compliqué à comprendre" quand on a pas eu les éclaircissements
le contraire d'une démarche KISS, en quelque sorte.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne