PHP - vérifie si la variable n'est pas définie

87

Considérez cette déclaration jquery

isTouch = document.createTouch !== undefined

Je voudrais savoir si nous avons une déclaration similaire en PHP, n'étant pas isset () mais vérifiant littéralement une valeur non définie, quelque chose comme:

$isTouch != ""

Y a-t-il quelque chose de similaire en PHP?

Timothy Coetzee
la source
2
duplication possible de PHP: "Remarque: variable non
définie

Réponses:

167

Vous pouvez utiliser -

$isTouch = isset($variable);

Il retournera truesi le $variableest défini. si la variable n'est pas définie, elle retournera false.

Remarque: renvoie TRUE si var existe et a une valeur autre que NULL, FALSE sinon.

Si vous voulez vérifier false, 0etc Vous pouvez alors utiliser empty()-

$isTouch = empty($variable);

empty() fonctionne pour -

  • "" (une chaîne vide)
  • 0 (0 sous forme d'entier)
  • 0,0 (0 comme flottant)
  • "0" (0 sous forme de chaîne)
  • NUL
  • FAUX
  • array () (un tableau vide)
  • $ var; (une variable déclarée, mais sans valeur)
Sougata Bose
la source
1
isset()renvoie toujours bool.
VeeeneX
Le cast booléen est-il nécessaire? isset (...) renvoie déjà un booléen non?
Cr3aHal0
1
Non, il retourne trueou false. Donc pas besoin de ce casting.
Sougata Bose
1
vous pouvez également le faire en utilisant le empty()qui renvoie false s'il s'agit d'une chaîne vide. isset()retournera true si c'est une chaîne vide, vide également effectue une vérification interne de l'ensemble.
micro
1
vous pouvez également faire ceci: $isTouch = (bool) $variable;qui fera la même chose isset()et est peut-être un peu mieux car cela fonctionnera comme empty().
micro
19

Une autre façon est simplement:

if($test){
    echo "Yes 1";
}
if(!is_null($test)){
    echo "Yes 2";
}

$test = "hello";

if($test){
    echo "Yes 3";
}

Reviendra:

"Yes 3"

Le meilleur moyen est d'utiliser isset (), sinon vous pouvez avoir une erreur comme "undefined $ test".

Vous pouvez le faire comme ceci:

if( isset($test) && ($test!==null) )

Vous n'aurez aucune erreur car la première condition n'est pas acceptée.

TiDJ
la source
Si nous utilisons $test!==nullsans parenthèses, que va-t-il se passer? Cela donnera-t-il une erreur?
Vir
Non, ça va aussi.
TiDJ
7

Pour vérifier si la variable est définie, vous devez utiliser la fonction isset.

$lorem = 'potato';

if(isset($lorem)){
    echo 'isset true' . '<br />';
}else{
    echo 'isset false' . '<br />';
}

if(isset($ipsum)){
    echo 'isset true' . '<br />';
}else{
    echo 'isset false' . '<br />';
}

ce code imprimera:

isset true
isset false

en savoir plus sur https://php.net/manual/en/function.isset.php

ErasmoOliveira
la source
6

Vous pouvez utiliser -

Opérateur ternaire pour vérifier la valeur de la météo définie par POST / GET ou pas quelque chose comme ça

$value1 = $_POST['value1'] = isset($_POST['value1']) ? $_POST['value1'] : '';
$value2 = $_POST['value2'] = isset($_POST['value2']) ? $_POST['value2'] : '';
$value3 = $_POST['value3'] = isset($_POST['value3']) ? $_POST['value3'] : '';
$value4 = $_POST['value4'] = isset($_POST['value4']) ? $_POST['value4'] : '';
Sumit Thakur
la source
3

Opérateur « pas stricte égalité » de JavaScript ( !==) sur la comparaison avec undefinedne pas entraîner falsesur des nullvaleurs.

var createTouch = null;
isTouch = createTouch !== undefined  // true

Pour obtenir un comportement équivalent en PHP, vous pouvez vérifier si le nom de la variable existe dans les clés du résultat de get_defined_vars().

// just to simplify output format
const BR = '<br>' . PHP_EOL;

// set a global variable to test independence in local scope
$test = 1;

// test in local scope (what is working in global scope as well)
function test()
{
  // is global variable found?
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test does not exist.

  // is local variable found?
  $test = null;
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test exists.

  // try same non-null variable value as globally defined as well
  $test = 1;
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.' ) . BR;
  // $test exists.

  // repeat test after variable is unset
  unset($test);
  echo '$test ' . ( array_key_exists('test', get_defined_vars())
                    ? 'exists.' : 'does not exist.') . BR;
  // $test does not exist.
}

test();

Dans la plupart des cas, isset($variable)c'est approprié. C'est équivalent à array_key_exists('variable', get_defined_vars()) && null !== $variable. Si vous utilisez simplement null !== $variablesans pré-vérification de l'existence, vous gâcherez vos journaux avec des avertissements car il s'agit d'une tentative de lecture de la valeur d'une variable non définie.

Cependant, vous pouvez appliquer une variable non définie à une référence sans aucun avertissement:

// write our own isset() function
function my_isset(&$var)
{
  // here $var is defined
  // and initialized to null if the given argument was not defined
  return null === $var;
}

// passing an undefined variable by reference does not log any warning
$is_set = my_isset($undefined_variable);   // $is_set is false
Le clone de Quasimodo
la source
0
if(isset($variable)){
    $isTouch = $variable;
}

OU

if(!isset($variable)){
    $isTouch = "";// 
}
Waruna Manjula
la source