require_once () ou die () ne fonctionne pas
Personne ne sait pourquoi mon require_once () ou die(); ne fonctionne pas. Il affiche toujours l'erreur Fatale à la place du message d'erreur que je touche dans le die(). Voir ci-dessous mon code:
require_once ('abc.php') or die("oops");
Message d'erreur s'afficher comme ci-dessous
"Erreur fatale: contrôleur::require_once() [function.exiger]: Failed opening required '1' (include_path='....."
à la place du message ("oups") je touche.
source d'informationauteur Jin Yong
Vous devez vous connecter pour publier un commentaire.
ou a une priorité plus élevée que d'exiger/require_once. Donc php évalue
avant de passer le résultat à require_once. Ou prend deux opérandes booléens. ('abc.php') correspond à la truepar conséquent, l'expression entière est true et
est invoquée. require_once prend un string, bool(true)->chaine => 1 =>
Vous n'avez pas besoin de l'or die(...) il y a des. Si le fichier ne peut être lu require_once va arrêter le php instance de toute façon.
Comme
include
est un langage spécial de construire et non pas une fonction, il n'a pas besoin paranthesis pour la paremeter liste:En fait, il n'a qu'un seul paramètre et en l'enveloppant dans parenthèse supplémentaire ne change rien:
De sorte que votre déclaration est identique à celle de la (les paremter est juste enveloppé):
Nous avons donc une expression booléenne en tant que paramètre qui est vrai ou faux. Et que les valeurs de l'équivalent de chaîne de
"1"
et""
respectivement:C'est la raison pour laquelle obtenir ce Failed opening required '1' message d'erreur.
Mais à l'aide de parenthèses sur la droite endroit comme celui-ci permet de travailler comme vous le souhaitez:
Ici
'abc.php'
est clairement le paramètre et la disjonction avecdie("oops")
est effectué sur la valeur de retour deinclude_once
. Le@
de l'opérateur est juste pour ignor le message d'erreurinclud_once
va jeter si le fichier n'existe pas.PS:
print
est aussi une construction du langage et fonctionne de la même manière.Lors de l'évaluation:
PHP évalue 'or die("oops")' d'abord pour une raison quelconque.
à force de PHP pour évaluer la "require_once ('abc.php')" encolse entre parenthèses.
Toutefois, en cas de "besoin" d'échec, PHP arrêts de traitement l'utilisation de "comprendre" à la place (voir https://stackoverflow.com/a/2418514/1704651). Aussi, le symbole @ devant include_once supprime le message d'erreur de MySQL, de sorte que seules les "oups" est sortie.
Fonctionne comme prévu.
Source: Ma propre frustration et https://bugs.php.net/bug.php?id=22342