Check if a variable is undefined in PHP

Php

Php Problem Overview


Consider this JavaScript statement:

isTouch = document.createTouch !== undefined

I would like to know if we have a similar statement in PHP, not being isset(), but literally checking for an undefined value. Something like:

$isTouch != ""

Is there something similar as the above in PHP?

Php Solutions


Solution 1 - Php

You can use -

$isTouch = isset($variable);

It will return true if the $variable is defined. If the variable is not defined it will return false.

> Note: It returns TRUE if the variable exists and has a value other than NULL, FALSE otherwise.

If you want to check for false, 0, etc., you can then use empty() -

$isTouch = empty($variable);

empty() works for -

  • "" (an empty string)
  • 0 (0 as an integer)
  • 0.0 (0 as a float)
  • "0" (0 as a string)
  • NULL
  • FALSE
  • array() (an empty array)
  • $var; (a variable declared, but without a value)

Solution 2 - Php

Another way is simply:

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

$test = "hello";

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

Will return:

"Yes 3"

The best way is to use isset(). Otherwise you can have an error like "undefined $test".

You can do it like this:

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

You'll not have any error, because the first condition isn't accepted.

Solution 3 - Php

The isset() function does not check if a variable is defined.

It seems you've specifically stated that you're not looking for isset() in the question. I don't know why there are so many answers stating that isset() is the way to go, or why the accepted answer states that as well.

It's important to realize in programming that null is something. I don't know why it was decided that isset() would return false if the value is null.

To check if a variable is undefined you will have to check if the variable is in the list of defined variables, using get_defined_vars(). There is no equivalent to JavaScript's undefined (which is what was shown in the question, no jQuery being used there).

In the following example it will work the same way as JavaScript's undefined check.

$isset = isset($variable);
var_dump($isset); // false

But in this example, it won't work like JavaScript's undefined check.

$variable = null;
$isset = isset($variable);
var_dump($isset); // false

$variable is being defined as null, but the isset() call still fails.

So how do you actually check if a variable is defined? You check the defined variables.

Using get_defined_vars() will return an associative array with keys as variable names and values as the variable values. We still can't use isset(get_defined_vars()['variable']) here because the key could exist and the value still be null, so we have to use array_key_exists('variable', get_defined_vars()).

$variable = null;
$isset = array_key_exists('variable', get_defined_vars());
var_dump($isset); // true


$isset = array_key_exists('otherVariable', get_defined_vars());
var_dump($isset); // false

However, if you're finding that in your code you have to check for whether a variable has been defined or not, then you're likely doing something wrong. This is my personal belief as to why the core PHP developers left isset() to return false when something is null.

Solution 4 - Php

To check if a variable is set you need to use the isset function.

$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 />';
}

This code will print:

isset true
isset false

Read more in isset.

Solution 5 - Php

You can use the ternary operator to check whether the value is set by POST/GET or not. Something like this:

$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'] : '';

Solution 6 - Php

You can use the PHP isset() function to test whether a variable is set or not. The isset() will return FALSE if testing a variable that has been set to NULL. Example:

<?php
    $var1 = '';
    if(isset($var1)){
        echo 'This line is printed, because the $var1 is set.';
    }
?>

This code will output "This line is printed, because the $var1 is set."

read more in https://stackhowto.com/how-to-check-if-a-variable-is-undefined-in-php/

Solution 7 - Php

JavaScript's 'strict not equal' operator (!==) on comparison with undefined does not result in false on null values.

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

To achieve an equivalent behaviour in PHP, you can check whether the variable name exists in the keys of the result of 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();

In most cases, isset($variable) is appropriate. That is aquivalent to array_key_exists('variable', get_defined_vars()) && null !== $variable. If you just use null !== $variable without prechecking for existence, you will mess up your logs with warnings because that is an attempt to read the value of an undefined variable.

However, you can apply an undefined variable to a reference without any warning:

// 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

Solution 8 - Php

The easiest way to check if a variable or array index exists (is defined) and is not null and is not empty and is not false:

#1

if($variable ?? false) 
    echo '$variable is defined';
else 
    echo '$variable is not defined';

// Result: $variable is not defined

#2

$variable = null;

if($variable ?? false) 
    echo '$variable is not null';
else 
    echo '$variable is null';

// Result: $variable is null

#3

$variable = false;

if($variable ?? false) 
    echo '$variable is not false';
else 
    echo '$variable is false';

// Result: $variable is false

#4

$variable = '';

if($variable ?? false) 
    echo '$variable is not empty';
else 
    echo '$variable is empty';

// Result: $variable is empty

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTimothy CoetzeeView Question on Stackoverflow
Solution 1 - PhpSougata BoseView Answer on Stackoverflow
Solution 2 - PhpTiDJView Answer on Stackoverflow
Solution 3 - PhpscorgnView Answer on Stackoverflow
Solution 4 - PhpErasmoOliveiraView Answer on Stackoverflow
Solution 5 - PhpSumit ThakurView Answer on Stackoverflow
Solution 6 - PhpthomasView Answer on Stackoverflow
Solution 7 - PhpQuasimodo's cloneView Answer on Stackoverflow
Solution 8 - PhpArash YounesiView Answer on Stackoverflow