可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.
回答1:
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.
回答2:
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);
回答3:
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;
回答4:
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
回答5:
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
回答6:
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