J'exécute un script PHP et continue de recevoir des erreurs comme:
Remarque: variable non définie: my_variable_name dans C: \ wamp \ www \ mypath \ index.php sur la ligne 10
Remarque: index non défini: mon_index C: \ wamp \ www \ mypath \ index.php sur la ligne 11
Les lignes 10 et 11 ressemblent à ceci:
echo "My variable value is: " . $my_variable_name;
echo "My index value is: " . $my_array["my_index"];
Quelle est la signification de ces messages d'erreur?
Pourquoi apparaissent-ils tout d'un coup? J'utilisais ce script depuis des années et je n'ai jamais eu de problème.
Comment les réparer?
Il s'agit d'une question de référence générale à laquelle les personnes doivent se connecter en tant que doublon, au lieu d'avoir à expliquer le problème à maintes reprises. Je pense que cela est nécessaire car la plupart des réponses du monde réel sur cette question sont très spécifiques.
Meta discussion connexe:
and-notice-undef
, juste une suggestion pour que l'URL ne soit pas coupée. Peut-être même en supprimant les (trop) citations. OuPHP: “Undefined variable/index/offset” notices
and-notice-undef
. Ce n'était qu'une (quelques) suggestion (s). Il se répète simplement aussiNotice: Undefined
.Réponses:
Remarque: variable non définie
De la grande sagesse du manuel PHP :
De la documentation PHP :
Cela signifie que vous pouvez utiliser uniquement
empty()
pour déterminer si la variable est définie, et en outre , il vérifie la variable par rapport à ce qui suit,0
,0.0
,""
,"0"
,null
,false
ou[]
.Exemple:
Testez l'extrait ci-dessus dans l' éditeur PHP en ligne 3v4l.org
Bien que PHP ne nécessite pas de déclaration de variable, il le recommande afin d'éviter certaines vulnérabilités de sécurité ou bogues où l'on oublierait de donner une valeur à une variable qui sera utilisée plus tard dans le script. Dans le cas des variables non déclarées, PHP émet une erreur de très bas niveau,
E_NOTICE
qui n'est même pas signalée par défaut, mais le manuel conseille de l'autoriser pendant le développement.Façons de traiter le problème:
Recommandé: déclarez vos variables, par exemple lorsque vous essayez d'ajouter une chaîne à une variable non définie. Ou utilisez
isset()
/!empty()
pour vérifier s'ils sont déclarés avant de les référencer, comme dans:Cela est devenu beaucoup plus propre à partir de PHP 7.0, maintenant vous pouvez utiliser l' opérateur null coalesce :
Définissez un gestionnaire d'erreurs personnalisé pour E_NOTICE et redirigez les messages loin de la sortie standard (peut-être vers un fichier journal):
Désactivez E_NOTICE de la création de rapports. Un moyen rapide d'exclure
E_NOTICE
est simplement :Supprimez l'erreur avec l' opérateur @ .
Remarque: il est fortement recommandé de n'implémenter que le point 1.
Remarque: index non défini / décalage non défini
Cette notification apparaît lorsque vous (ou PHP) essayez d'accéder à un index non défini d'un tableau.
Façons de traiter le problème:
Vérifiez si l'index existe avant d'y accéder. Pour cela, vous pouvez utiliser
isset()
ouarray_key_exists()
:La construction du langage
list()
peut générer cela lorsqu'elle tente d'accéder à un index de tableau qui n'existe pas:Deux variables sont utilisées pour accéder à deux éléments de tableau, mais il n'y a qu'un seul élément de tableau, index
0
, donc cela générera:$_POST
/$_GET
/$_SESSION
variableLes avis apparaissent au- dessus souvent lorsque vous travaillez avec
$_POST
,$_GET
ou$_SESSION
. Pour$_POST
et il$_GET
vous suffit de vérifier si l'index existe ou non avant de les utiliser. Car$_SESSION
vous devez vous assurer d'avoir démarré la sessionsession_start()
et que l'index existe également.Notez également que les 3 variables sont superglobales et sont en majuscules.
En relation:
la source
@
) a quelques problèmes de performances. De plus, comme il supprime toutes les erreurs dans une portée particulière, son utilisation sans précaution peut masquer les messages que vous souhaiteriez voir.$var = @$_GET['nonexisting'];
cause toujours un avis ..$value = isset($_POST['value']) ? $_POST['value'] : '';
au lieu d'utiliser 4.$value = @$_POST['value'];
?Essayez-les
Ou, comme une solution rapide et sale:
Remarque sur les sessions:
Lors de l'utilisation de sessions,
session_start();
doit être placé dans tous les fichiers utilisant des sessions.http://php.net/manual/en/features.sessions.php
la source
E_NOTICE
partir duphp.ini
fichier de configuration, faiteserror_reporting = (E_ALL & ~E_NOTICE)
Opérateur d' affichage d'erreur
@
Pour les notifications indésirables et redondantes, on pourrait utiliser l'
@
opérateur dédié pour » masquer « les messages variables / index non définis.isset?:
ou??
super-supression cependant. Les notifications peuvent toujours être enregistrées. Et on peut ressusciter des@
notifications cachées avec:set_error_handler("var_dump");
if (isset($_POST["shubmit"]))
dans votre code initial.@
ouisset
seulement après avoir vérifié la fonctionnalité.@
est principalement acceptable pour les paramètres$_GET
/$_POST
input, en particulier s'ils sont facultatifs .Et puisque cela couvre la majorité de ces questions, développons les causes les plus courantes:
$_GET
/$_POST
/$_REQUEST
entrée non définieLa première chose que vous faites lorsque vous rencontrez un index / décalage indéfini, est de vérifier les fautes de frappe:
$count = $_GET["whatnow?"];
Deuxièmement, si l'avis n'a pas de cause évidente, utilisez
var_dump
ouprint_r
pour vérifier tous les tableaux d'entrée pour leur contenu actuel:Les deux indiqueront si votre script a été invoqué avec le bon ou n'importe quel paramètre.
Alternativement ou utilisez en plus votre navigateur devtools ( F12) et inspectez l'onglet réseau pour les requêtes et les paramètres:
Les paramètres POST et l'entrée GET seront affichés séparément.
Pour les
$_GET
paramètres , vous pouvez également le coup d' oeil àQUERY_STRING
enPHP a quelques règles pour fusionner les noms de paramètres non standard dans les superglobaux. Apache pourrait également effectuer une réécriture. Vous pouvez également consulter les en-
$_COOKIES
têtes de requête HTTP bruts et autres fournis de cette façon.Plus évidemment, regardez la barre d'adresse de votre navigateur pour les paramètres GET :
http://example.org/script.php?id=5&sort=desc
Les
name=value
paires après le point d'?
interrogation sont vos paramètres de requête (GET). Ainsi, cette URL ne pouvait que produire$_GET["id"]
et$_GET["sort"]
.Enfin, vérifiez vos déclarations
<form>
et<input>
, si vous attendez un paramètre mais n'en recevez aucun.<input name=FOO>
id=
outitle=
ne suffit pas.method=POST
formulaire doit remplir$_POST
.method=GET
(ou le laisser de côté) produirait des$_GET
variables.action=script.php?get=param
via $ _GET et lesmethod=POST
champs restants de $ _POST à côté.$_REQUEST['vars']
, ce qui écrase les paramètres GET et POST.Si vous utilisez mod_rewrite, vous devez vérifier les deux
access.log
ainsi que permettre à laRewriteLog
de comprendre les paramètres absents.$_FILES
$_FILES["formname"]
.enctype=multipart/form-data
method=POST
dans votre<form>
déclaration.$_COOKIE
$_COOKIE
tableau n'est jamais rempli juste aprèssetcookie()
, mais uniquement sur toute demande HTTP de suivi.la source
Généralement à cause d'une "mauvaise programmation" et d'une possibilité d'erreurs maintenant ou plus tard.
if (isset($varname))
avant de l'utiliserla source
Cela signifie que vous testez, évaluez ou imprimez une variable à laquelle vous n'avez encore rien attribué. Cela signifie que vous avez une faute de frappe ou que vous devez d'abord vérifier que la variable a été initialisée à quelque chose. Vérifiez vos chemins logiques, il peut être défini dans un chemin mais pas dans un autre.
la source
Je ne voulais pas désactiver l'avis car c'est utile, mais je voulais éviter de trop taper.
Ma solution était cette fonction:
Donc, si je veux faire référence à $ name et echo s'il existe, j'écris simplement:
Pour les éléments du tableau:
Dans la page si je veux faire référence à $ _REQUEST ['nom']:
la source
$foo = "BABAR"; ifexists('foo');
retourneront en général null. (Les italiques sont les chapitres de php.net.)if( !empty($user) and !empty($location) ) echo "hello $user ..."
La meilleure façon d'obtenir une chaîne d' entrée est:
Cette doublure équivaut presque à:
Si vous voulez absolument une valeur de chaîne , tout comme:
la source
C'est parce que la variable '$ user_location' n'est pas définie. Si vous utilisez une boucle if à l'intérieur de laquelle vous déclarez la variable '$ user_location', vous devez également avoir une boucle else et la définir. Par exemple:
Le code ci-dessus créera une erreur car la boucle if n'est pas satisfaite et dans la boucle else '$ user_location' n'a pas été défini. PHP a quand même été invité à faire écho à la variable. Donc, pour modifier le code, vous devez faire ce qui suit:
la source
En réponse à "" Pourquoi apparaissent-ils tout d'un coup? J'utilisais ce script depuis des années et je n'ai jamais eu de problème. "
Il est très courant que la plupart des sites fonctionnent sous le rapport d'erreurs "par défaut" de "Afficher toutes les erreurs, mais pas les" notifications "et les" obsolètes "". Cela sera défini dans php.ini et s'appliquera à tous les sites sur le serveur. Cela signifie que ces "notifications" utilisées dans les exemples seront supprimées (masquées) tandis que d'autres erreurs, considérées comme plus critiques, seront affichées / enregistrées.
L'autre paramètre critique est que les erreurs peuvent être masquées (c'est-
display_errors
à- dire définies sur "off" ou "syslog").Ce qui se sera produit dans ce cas, c'est que le a
error_reporting
été modifié pour afficher également les avis (selon les exemples) et / ou que les paramètres ont été modifiés à l'display_errors
écran (par opposition à les supprimer / à les enregistrer).Pourquoi ont-ils changé?
La réponse la plus évidente / la plus simple est que quelqu'un a ajusté l'un de ces paramètres dans php.ini, ou une version mise à niveau de PHP utilise maintenant un php.ini différent d'avant. C'est le premier endroit à regarder.
Cependant, il est également possible de remplacer ces paramètres dans
et n'importe lequel d'entre eux aurait également pu être modifié.
Il y a aussi la complication supplémentaire que la configuration du serveur Web peut activer / désactiver les directives .htaccess, donc si vous avez des directives dans .htaccess qui démarrent / s'arrêtent soudainement, vous devez vérifier cela.
(.htconf / .htaccess suppose que vous exécutez en tant qu'apache. Si vous exécutez la ligne de commande, cela ne s'appliquera pas; si vous exécutez IIS ou un autre serveur Web, vous devrez vérifier ces configurations en conséquence)
Sommaire
error_reporting
etdisplay_errors
php dans php.ini n'ont pas changé, ou que vous n'utilisez pas un php.ini différent d'avant.error_reporting
etdisplay_errors
php dans .htconf (ou vhosts, etc.) n'ont pas changéerror_reporting
etdisplay_errors
php dans .htaccess n'ont pas changéerror_reporting
et ydisplay_errors
ont été définies.la source
la solution rapide consiste à affecter votre variable à null en haut de votre code
la source
J'avais l'habitude de maudire cette erreur, mais il peut être utile de vous rappeler d'échapper à l'entrée de l'utilisateur.
Par exemple, si vous pensiez que c'était un code abrégé intelligent:
... détrompez-vous! Une meilleure solution est:
(J'utilise une
html()
fonction personnalisée pour échapper aux personnages, votre kilométrage peut varier)la source
En PHP 7.0, il est désormais possible d'utiliser l'opérateur de coalescence Null:
Égale à:
Manuel PHP PHP 7.0
la source
if (is_array($my_array['idontexist'] ?? '')) { dosomething(); }
isset()
si vous réussissezis_array()
- ce qui est un comportement booléen et inattendu.J'utilise toujours la fonction utile exst () qui déclare automatiquement les variables.
Votre code sera -
la source
Dans un langage très simple .
L'erreur est que vous utilisez une variable
$user_location
que vous n'avez pas définie précédemment et qui n'a aucune valeur. Je vous recommande donc de déclarer cette variable avant de l' utiliser , par exemple:$user_location = '';
Ou
$user_location = 'Los Angles';
Il s'agit d'une erreur très courante à laquelle vous pouvez faire face, alors ne vous inquiétez pas, déclarez simplement la variable et profitez du codage .
la source
pourquoi ne pas garder les choses simples?
la source
POURQUOI CELA ARRIVE-T-IL?
Au fil du temps, PHP est devenu un langage plus axé sur la sécurité. Les paramètres qui étaient auparavant désactivés par défaut sont désormais activés par défaut. Un exemple parfait de cela est
E_STRICT
, qui est devenu activé par défaut à partir de PHP 5.4.0 .De plus, selon la documentation PHP, par défaut,
E_NOTICE
est désactivé dans php.ini. Les documents PHP recommandent de l'activer à des fins de débogage . Cependant, lorsque je télécharge PHP depuis le référentiel Ubuntu - et depuis la pile Windows de BitNami - je vois autre chose.Notez que
error_reporting
la valeur de production est en fait définie par défaut, et non la valeur "par défaut" par défaut. Ceci est quelque peu déroutant et n'est pas documenté en dehors de php.ini, donc je n'ai pas validé cela sur d'autres distributions.Pour répondre à votre question, cependant, cette erreur apparaît maintenant alors qu'elle ne s'est pas produite auparavant parce que:
Vous avez installé PHP et les nouveaux paramètres par défaut sont quelque peu mal documentés mais ne les excluent pas
E_NOTICE
.E_NOTICE
des avertissements tels que des variables non définies et des index non définis contribuent à rendre votre code plus propre et plus sûr. Je peux vous dire que, il y a des années, garderE_NOTICE
activé m'a forcé à déclarer mes variables. Cela rendait beaucoup plus facile l'apprentissage du C, ne déclarait pas que les variables étaient beaucoup plus importantes.QUE PUIS-JE FAIRE À CE SUJET?
Désactivez-le
E_NOTICE
en copiant la «valeur par défaut»E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
et en la remplaçant par ce qui n'est actuellement pas commenté après la connexion égaleerror_reporting =
. Redémarrez Apache ou PHP si vous utilisez CGI ou FPM. Assurez-vous que vous éditez le "bon" php.ini. Le bon sera Apache si vous exécutez PHP avec Apache, fpm ou php-fpm si vous exécutez PHP-FPM, cgi si vous exécutez PHP-CGI, etc. Ce n'est pas la méthode recommandée, mais si vous avez du code hérité qui va être extrêmement difficile à modifier, alors ce pourrait être votre meilleur pari.Désactivez au niveau
E_NOTICE
du fichier ou du dossier. Cela peut être préférable si vous avez du code hérité mais que vous voulez faire les choses de la bonne manière sinon. Pour ce faire, vous devez consulter Apache2, Nginx ou quel que soit le serveur de votre choix. Dans Apache, vous utiliseriez l'php_value
intérieur de<Directory>
.Réécrivez votre code pour être plus propre. Si vous devez le faire lors du passage à un environnement de production ou si vous ne voulez pas que quelqu'un voit vos erreurs, assurez-vous de désactiver l'affichage des erreurs et de ne consigner que vos erreurs (voir
display_errors
etlog_errors
dans php.ini et les paramètres de votre serveur) .Pour développer l'option 3: c'est l'idéal. Si vous pouvez suivre cette voie, vous devriez. Si vous ne suivez pas cette route initialement, envisagez de la déplacer éventuellement en testant votre code dans un environnement de développement. Pendant que vous y êtes, débarrassez-vous
~E_STRICT
et~E_DEPRECATED
voyez ce qui pourrait mal se passer à l'avenir. Vous allez voir BEAUCOUP d'erreurs inconnues, mais cela vous empêchera d'avoir des problèmes désagréables lorsque vous aurez besoin de mettre à niveau PHP à l'avenir.QUE SIGNIFIENT LES ERREURS?
Undefined variable: my_variable_name
- Cela se produit lorsqu'une variable n'a pas été définie avant utilisation. Lorsque le script PHP est exécuté, il prend simplement en interne une valeur nulle. Cependant, dans quel scénario auriez-vous besoin de vérifier une variable avant qu'elle ne soit définie? En fin de compte, c'est un argument pour le "code bâclé". En tant que développeur, je peux vous dire que j'adore ça quand je vois un projet open source où les variables sont définies aussi haut dans leur portée qu'elles peuvent l'être. Il permet de savoir plus facilement quelles variables vont apparaître à l'avenir et facilite la lecture / l'apprentissage du code.Undefined index: my_index
- Cela se produit lorsque vous essayez d'accéder à une valeur dans un tableau et qu'elle n'existe pas. Pour éviter cette erreur, effectuez une vérification conditionnelle.Une autre option consiste à déclarer un tableau vide en haut de votre fonction. Ce n'est pas toujours possible.
(conseil supplémentaire)
vim
personne de nos jours :).la source
index non défini signifie dans un tableau que vous avez demandé pour un index de tableau non disponible, par exemple
variable non définie signifie que vous avez utilisé une variable complètement inexistante ou qui n'est pas définie ou initialisée par ce nom par exemple
décalage indéfini signifie dans le tableau que vous avez demandé une clé non existante. Et la solution pour cela est de vérifier avant utilisation
la source
Concernant cette partie de la question:
Aucune réponse définitive, mais voici quelques explications possibles des raisons pour lesquelles les paramètres peuvent changer «soudainement»:
Vous avez mis à niveau PHP vers une version plus récente qui peut avoir d'autres valeurs par défaut pour error_reporting, display_errors ou d'autres paramètres pertinents.
Vous avez supprimé ou introduit du code (éventuellement dans une dépendance) qui définit les paramètres pertinents lors de l'exécution à l'aide de
ini_set()
ouerror_reporting()
(recherchez-les dans le code)Vous avez changé la configuration du serveur Web (en supposant qu'Apache ici): les
.htaccess
fichiers et les configurations vhost peuvent également manipuler les paramètres php.Habituellement, les notifications ne s'affichent / ne sont pas signalées (voir le manuel PHP ), il est donc possible que lors de la configuration du serveur, le fichier php.ini ne puisse pas être chargé pour une raison quelconque (autorisations de fichier ??) et vous étiez sur les paramètres par défaut . Plus tard, le «bug» a été résolu (par accident) et maintenant il PEUT charger le fichier php.ini correct avec le jeu error_reporting pour afficher les notifications.
la source
Si vous travaillez avec des classes, vous devez vous assurer de référencer les variables membres en utilisant
$this
:la source
Une autre raison pour laquelle un avis d'index non défini sera levé serait qu'une colonne a été omise d'une requête de base de données.
C'est à dire:
Ensuite, essayez d'accéder à plus de colonnes / lignes dans une boucle.
C'est à dire:
ou en
while
boucle:Il faut également noter que sur un * NIX OS et Mac OS X, les choses sont sensibles à la casse.
Consultez les questions et réponses suivantes sur Stack:
Les noms de table dans MySQL sont-ils sensibles à la casse?
noms de table sensibles à la casse mysql dans les requêtes
MySql - Problème sensible à la casse des tables sur différents serveurs
la source
L'utilisation d'un ternaire est simple, lisible et propre:
Pré PHP 7
Attribuez une variable à la valeur d'une autre variable si elle est définie, sinon affectez
null
(ou quelle que soit lavaleur par défaut dont vous avez besoin):PHP 7+ Identique
sauf en utilisant Null Coalescing Operator . Il n'est plus nécessaire d'appeler
isset()
car cela est intégré, et pas besoin de fournir la variable à renvoyer car elle est supposée renvoyer la valeur de la variable vérifiée:Les deux arrêteront les avis de la question OP, et les deux sont l'équivalent exact de:
Si vous n'avez pas besoin de définir une nouvelle variable, vous pouvez directement utiliser la valeur retournée du ternaire, comme avec
echo
, les arguments de fonction, etc.:Écho:
Une fonction:
Ce qui précède fonctionnera de la même manière avec les tableaux, y compris les sessions, etc., en remplaçant la variable en cours de vérification par exemple:
$_SESSION['checkMe']
ou quel que soit le niveau de profondeur dont vous avez besoin, par exemple:
$clients['personal']['address']['postcode']
Suppression:
Il est possible de supprimer les avis PHP avec
@
ou de réduire votre niveau de rapport d'erreurs, mais cela ne résout pas le problème , il arrête simplement qu'il soit signalé dans le journal des erreurs. Cela signifie que votre code a toujours essayé d'utiliser une variable qui n'a pas été définie, ce qui peut ou non signifier que quelque chose ne fonctionne pas comme prévu - selon l'importance de la valeur manquante.Vous devriez vraiment vérifier ce problème et le traiter de manière appropriée, soit en servant un message différent, soit en renvoyant simplement une valeur nulle pour tout le reste afin d'identifier l'état précis.
Si vous vous souciez simplement que l'avis ne figure pas dans le journal des erreurs, vous pouvez simplement ignorer le journal des erreurs en option.
la source
Une cause courante d'une variable qui n'existe pas après la soumission d' un formulaire HTML est que l'élément de formulaire n'est pas contenu dans une
<form>
balise:Exemple: élément non contenu dans le
<form>
Exemple: élément maintenant contenu dans le
<form>
la source
Vous utilisiez probablement l'ancienne version de PHP jusqu'à maintenant et vous avez mis à jour PHP, c'est la raison pour laquelle il fonctionnait sans erreur jusqu'à maintenant depuis des années. jusqu'à PHP4, il n'y avait pas d'erreur si vous utilisez une variable sans la définir, mais à partir de PHP5, elle génère des erreurs pour les codes comme mentionné en question.
la source
Lorsque vous traitez des fichiers, un enctype et une méthode POST appropriés sont requis, ce qui déclenchera un avis d'index non défini si l'un ou l'autre n'est pas inclus dans le formulaire.
Le manuel indique la syntaxe de base suivante:
HTML
PHP
Référence:
la source
J'ai posé une question à ce sujet et j'ai été renvoyé à ce message avec le message:
Je partage ici ma question et ma solution:
Voici l'erreur:
La ligne 154 est le problème. Voici ce que j'ai à la ligne 154:
Je pense que le problème est que j'écris des conditions pour la variable
$city
, qui n'est pas la clé mais la valeur$key => $city
. Tout d'abord, pourriez-vous confirmer si c'est la cause de l'avertissement? Deuxièmement, si tel est le problème, pourquoi ne puis-je pas écrire une condition basée sur la valeur? Doit-il être avec la clé dont j'ai besoin pour écrire la condition?MISE À JOUR 1: Le problème est que lors de l'exécution
$citiesCounterArray[$key]
, parfois$key
correspond à une clé qui n'existe pas dans le$citiesCounterArray
tableau, mais ce n'est pas toujours le cas en fonction des données de ma boucle. Ce dont j'ai besoin, c'est de définir une condition pour que s'il$key
existe dans le tableau, puis d'exécuter le code, sinon, sautez-le.MISE À JOUR 2: Voici comment je l'ai corrigé en utilisant
array_key_exists()
:la source
Ces erreurs se produisent chaque fois que nous utilisons une variable qui n'est pas définie.
La meilleure façon de les gérer est de définir des rapports d'erreurs pendant le développement.
Pour définir le rapport d'erreurs sur:
Sur les serveurs de production, le rapport d'erreurs est désactivé, par conséquent, nous n'obtenons pas ces erreurs.
Sur le serveur de développement, cependant, nous pouvons définir le rapport d'erreurs.
Pour se débarrasser de cette erreur, nous voyons l'exemple suivant:
Nous pouvons initialiser les variables à
NULL
avant d'attribuer leurs valeurs ou de les utiliser.Ainsi, nous pouvons modifier le code comme:
Cela ne perturbera aucune logique de programme et ne produira pas d'avis même s'il
$test
n'a pas de valeur.Donc, en gros, il est toujours préférable d'activer le rapport d'erreurs pour le développement.
Et corrigez toutes les erreurs.
Et en production, le rapport d'erreurs doit être désactivé.
la source
Ces avis sont dus au fait que vous n'avez pas la variable utilisée
defined
et que lamy_index
clé n'était pas présente dans la$my_array
variable.Ces notifications ont été déclenchées à chaque fois, car la vôtre
code
n'est pas correcte, mais vous n'aviez probablement pas signalé les notifications.Résolvez les bugs:
Une autre façon de sortir ça:
la source
En PHP, vous devez d'abord définir la variable pour pouvoir l'utiliser.
On peut vérifier que la variable est définie ou pas de manière très efficace!.
Explication simple
la source