web-dev-qa-db-fra.com

Vérifiez si la variable n'est pas définie dans PHP

En PHP, je veux vérifier si une variable n'a pas été définie/définie, où la définition d'une variable NULL est considérée comme définie/définie.

Je suis au courant de tout ici: http://php.net/manual/en/types.comparisons.php y compris isset (), empty () et is_null (). Aucun de ceux-ci ne semble être ce que je recherche. Prenons l'exemple suivant:

<?php 
$myNull = null;
echo 'isset($myNull): "'.isset($myNull).'"<br />';
echo '$myNull value = "'.$myNull . '"<br />';

echo "<br />";

echo 'isset($myUndefined): "'.isset($myUndefined).'"<br />';
echo '$myUndefined value = "'.$myUndefined . '"<br />';
?>

Cet exemple génère quelque chose comme:
isset ($ myNull): ""
$ myNull value = ""

isset ($ myUndefined): ""
Remarquer: Undefined variable: myUndefined dans C:\wamp\www\plm\temp4.php sur la ligne 9
$ myUndefined value = ""

Je veux savoir si une variable est Undefined comme il est dit ci-dessus dans l'avis. Je veux une fonction, appelez-la "is_undefined", où

$myNull = null;
is_undefined($myNull); // is false
is_undefined($myUndefined); // is true

N'importe qui? Merci d'avance.

16
tjbourke

Je ne l'ai pas encore utilisé - mais je pense que "get_defined_vars" devrait valoir le coup d'œil ... http://php.net/manual/en/function.get-defined-vars.php =

Je voudrais essayer et vider le résultat.

19
cljk

Je pense que get_defined_vars est un bon candidat pour un tel travail:

array_key_exists('myNull', get_defined_vars());

Devrait faire ce que vous attendez.

Si vous travaillez sur un contexte global, vous pouvez également utiliser:

array_key_exists('myNull', $GLOBALS);
9
Alain Tiemblo

Si vous voulez une fonction is_undefined, je préférerais ne pas travailler avec des tableaux donc je ferais ceci:

function is_undefined(&$test) {
    return isset($test) && !is_null($test);
}

Ainsi, lorsque vous echo isset($myNull); il convertit le booléen (true) en "". c'est pourquoi la valeur est vide. Si vous voulez le voir à l'écran, vous pouvez faire var_dump(isset($myNull)); qui s'affichera si c'est vrai ou faux.

Vous avez également un écho de $ myUndefined mais il n'est pas encore défini, c'est pourquoi vous obtenez un avertissement. Ce que vous voulez faire, c'est:

if (!empty($myUndefined)) {
    // variable is defined so do something with it
    echo '$myUndefined value = "' . $myUndefined . '"<br />';
} else {
    echo 'Oops, $myUndefined is Undefined!<br />";
}

Voici un bref aperçu de isset () vs is_null () vs empty ()

$foo = null;
// isset($foo) == true;
// empty($foo) == true;
// is_null($foo) == true;

// Notice I don't set $foo2 to anything
// isset($foo2) == false;
// empty($foo2) == true;
// is_null($foo2) throws a notice!

$foo3 = false;
// isset($foo2) == true;
// empty($foo2) == true;
// is_null($foo2) == false;

$foo4 = 1234;
// isset($foo2) == true;
// empty($foo2) == false;
// is_null($foo2) == false;
7
chrislondon

Vous pouvez également utiliser compact() , si la variable que vous lui donnez n'est pas dans la table des symboles, elle retourne un tableau vide, sinon un tableau contenant la paire nom/valeur de la variable , transformez simplement le résultat en booléen

<?php

$myNull = null;

$isDefined = (bool) compact('myNull'); // true

$otherIsDefined = (bool) compact('myUndefined'); // false 
4
Crisp

Oui, tout comme M. Jonathan mentionné ci-dessus, nous pourrions utiliser array_key_exists () + $ GLOBALS plutôt que get_defined_vars () pour identifier la variable non définie à null

$x;  // $x is undefined 
$y=null;  // $y is defined and is NULL type variable with the only null value
$z=[];    // $z is an array object

if( array_key_exists('x', $GLOBALS) && is_null($x) ) echo "\$x exists and is null\n";
if( array_key_exists('y', $GLOBALS) && is_null($y) ) echo "\$y exists and is null\n";
if( array_key_exists('z', $GLOBALS) && is_null($z) ) echo "\$he exists and is null\n";

// output 
$y exists and is null
0
John Yin

Si vous utilisez OOP alors utilisez la surcharge __isset() cette fonction s'exécutera lorsque vous essayez d'accéder à une variable qui n'est définie nulle part. Exemple:

 public function __isset($name) {
    echo 'Hello';
 }

Ainsi, évitera tout message d'erreur ou avis lié à une variable non définie

0
GGio