Question

Je me demande s'il y a un moyen rapide de l'écho des variables non définies sans obtenir un avertissement? (. Je peux modifier le niveau de rapport d'erreur, mais je ne veux pas) Le plus petit que j'ai à ce jour est:

isset($variable)?$variable:''

Je n'aime pas ce pour plusieurs raisons:

  • Il est un peu « verbeux » et complexe
  • $variable est répété
  • L'écho d'une chaîne vide toujours un peu me agace.
  • Mes noms de variables seront probablement plus, par exemple $arrayvar['parameter']
Était-ce utile?

La solution

vous pouvez utiliser l'exemple ifsetor () provenant :

function ifsetor(&$variable, $default = null) {
    if (isset($variable)) {
        $tmp = $variable;
    } else {
        $tmp = $default;
    }
    return $tmp;
}

par exemple:

echo ifsetor($variable);
echo ifsetor($variable, 'default');

Cela ne génère pas d'avis car la variable est passée par référence.

Autres conseils

Vous pouvez exécuter avec le @.

echo @$variable;

Cependant, il est préférable de ne pas ignorer les variables non définies. les variables non définies pourraient indiquer une erreur logique sur le script, et il est préférable d'assurer que toutes les variables sont définies avant l'utilisation.

echo @$variable;

Ceci est une problème de longue date avec PHP , ils ont l'intention de le fixer avec isset_or() (ou une fonction similaire) en PHP 6, nous espérons cette fonctionnalité fera dans PHP 5.3 ainsi. Pour l'instant, vous devez utiliser le isset () / exemple ternaire dans votre question, ou bien utiliser le préfixe @ pour faire taire l'erreur. À mon humble avis, c'est la seule circonstance qui justifie l'utilisation @ en PHP.

Je ne vous soucier des problèmes de vitesse à l'aide echo avec une chaîne vide, il est probablement plus cher de l'envelopper dans une clause de if que de simplement écho chaîne vide.

variables non définies sont très fréquentes, je vous suggère d'initialiser variable null dans un premier temps

$var = null;

ou désactiver le rapport d'erreur pour avis:

error_reporting(E_ALL^E_NOTICE);

supprimer les erreurs en utilisant l'opérateur @ oblige l'interprète à modifier le niveau d'erreur, l'exécution de la fonction, puis revenir niveau d'erreur. Cela diminue votre temps d'exécution des scripts.

Construire une fonction comme ceci éliminera au moins 3 de vos raisons:

function echoVar($var, $ret=NULL) {
    return isset($var)?$var:$ret;
}

echoVar($arrayvar['parameter']);

Mais pourquoi l'écho des variables non définies? Cela ressemble pas vraiment bien codé ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top