tjbourke
tjbourke

Reputation: 221

Check if variable is_undefined in PHP

In PHP, I want to check if a variable has not been set/defined, where setting a variable NULL is considered set/defined.

I'm aware everything here: http://php.net/manual/en/types.comparisons.php including isset(), empty(), and is_null(). None of these appear to be what I'm looking for. Consider the following example:

<?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 />';
?>

This example outputs something like:
isset($myNull): ""
$myNull value = ""

isset($myUndefined): ""
Notice: Undefined variable: myUndefined in C:\wamp\www\plm\temp4.php on line 9
$myUndefined value = ""

I want to know if a variable is Undefined as it says above in the notice. I want a function, call it "is_undefined", where

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

Anyone? Thanks in advance.

Upvotes: 15

Views: 36843

Answers (7)

Muhammad Bilal
Muhammad Bilal

Reputation: 3008

To check a variable is define and have some value we can use isset() in a condition

if(!isset($var)){}

Upvotes: 0

John Yin
John Yin

Reputation: 8357

Yes, just like Mr. Jonathan mentioned above, we could use array_key_exists() + $GLOBALS rather than get_defined_vars() to identify Undefined variable to 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

Upvotes: 0

Crisp
Crisp

Reputation: 11447

You can use compact() for this too, if the variable you give it isn't in the symbol table it returns an empty array, otherwise an array containing the variable name/value pair, just cast the result to a boolean

<?php

$myNull = null;

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

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

Upvotes: 4

chrislondon
chrislondon

Reputation: 12031

If you want an is_undefined function I would prefer not to work with arrays so I would do this:

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

So when you echo isset($myNull); it converts the boolean(true) to "". thats why the value is blank. If you want to see it on the screen you can do var_dump(isset($myNull)); that will display if it's true or false.

Also you have an echo of $myUndefined but it's not set yet so that's why you get a warning. What you want to do is:

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

Here is a brief overview of 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;

Upvotes: 8

Alain
Alain

Reputation: 36954

I think that get_defined_vars is a good candidate for such job:

array_key_exists('myNull', get_defined_vars());

Should do what you expect.

If you work on a global context, you can also use:

array_key_exists('myNull', $GLOBALS);

Upvotes: 10

GGio
GGio

Reputation: 7653

If you are using OOP then use overloading __isset() this function will execute when you are trying to access a variable that is not defined anywhere. example:

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

Thus, will avoid any error message or notice related to undefined variable

Upvotes: 0

cljk
cljk

Reputation: 975

I haven´t used it yet - but I think that "get_defined_vars" should be worth a look... http://php.net/manual/en/function.get-defined-vars.php

I would give it a try and dump the result.

Upvotes: 18

Related Questions