PHP: compruebe si la variable no está definida

87

Considere esta declaración de jquery

isTouch = document.createTouch !== undefined

Me gustaría saber si tenemos una declaración similar en PHP, que no sea isset () sino que literalmente verifique un valor indefinido, algo como:

$isTouch != ""

¿Hay algo similar a lo anterior en PHP?

Timothy Coetzee
fuente
2
posible duplicado de PHP: "Aviso: variable no
definida

Respuestas:

167

Puedes usar -

$isTouch = isset($variable);

Volverá truesi $variableestá definido. si la variable no está definida, regresará false.

Nota: Devuelve VERDADERO si var existe y tiene un valor distinto de NULL, FALSE en caso contrario.

Si desea verificar false, 0etc. , puede usar empty()-

$isTouch = empty($variable);

empty() trabaja para -

  • "" (una cadena vacía)
  • 0 (0 como un número entero)
  • 0.0 (0 como flotante)
  • "0" (0 como una cadena)
  • NULO
  • FALSO
  • array () (una matriz vacía)
  • $ var; (una variable declarada, pero sin valor)
Sougata Bose
fuente
1
isset()siempre devuelve bool.
VeeeneX
¿Es necesario el elenco booleano? isset (...) ya devuelve bool, ¿verdad?
Cr3aHal0
1
No. Vuelve trueo false. Así que no hay necesidad de ese casting.
Sougata Bose
1
también puede hacer esto usando el empty()que devolvería falso si es una cadena vacía. isset()devolverá verdadero si es una cadena vacía, también vacía hace una verificación interna de isset.
micrófono
1
también puede hacer esto: $isTouch = (bool) $variable;que hará lo mismo isset()y tal vez sea un poco mejor ya que funcionará como empty().
micrófono
19

Otra forma es simplemente:

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

$test = "hello";

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

Regresará:

"Yes 3"

La mejor manera es usar isset (), de lo contrario, puede tener un error como "prueba $ indefinida".

Puedes hacerlo así:

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

No tendrás ningún error porque no se acepta la primera condición.

TiDJ
fuente
Si usamos $test!==nullsin corchetes, ¿qué pasará? ¿Dará error?
Vir
No, también está bien.
TiDJ
7

Para comprobar si la variable está configurada, debe usar la función 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 />';
}

este código imprimirá:

isset true
isset false

leer más en https://php.net/manual/en/function.isset.php

ErasmoOliveira
fuente
6

Puedes usar -

Operador ternario para verificar si el valor establecido por POST / GET o no algo como esto

$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
fuente
3

JavaScript de 'estricta es igual a' operador ( !==) en comparación con los undefinedno no como resultado falsede nullvalores.

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

Para lograr un comportamiento equivalente en PHP, puede verificar si el nombre de la variable existe en las claves del resultado 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();

En la mayoría de los casos, isset($variable)es apropiado. Eso es equivalente a array_key_exists('variable', get_defined_vars()) && null !== $variable. Si solo usa null !== $variablesin verificar previamente la existencia, estropeará sus registros con advertencias porque es un intento de leer el valor de una variable indefinida.

Sin embargo, puede aplicar una variable indefinida a una referencia sin ninguna advertencia:

// 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
Clon de Quasimodo
fuente
0
if(isset($variable)){
    $isTouch = $variable;
}

O

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