尝试确定变量是否是这些可能结果之一:
我从这开始:
if ( isset($value) )
var_dump("It's set");
else
var_dump("Not set");
包括变量是否已设置。但是我还想覆盖变量是否为null。了解以下内容:
$value = null;
var_dump( isset($value) ); // Returns false
因此,在未设置的情况下返回null值。所以我不能这样做:
if ( isset($value) )
var_dump("It's set");
else if ( is_null($value) ) // This throws exception if $value is not set
var_dump("It's null");
else
var_dump("Not set");
也不能这样做:
if ( isset($value) ) {
var_dump("It's set");
} else {
if ( is_null($value) )
var_dump("It's null"); // Also throws an exception because $value is not set
else
var_dump("Not set");
}
起初我以为会有一种简单的方法可以做到这一点,但它是在逃避我。问题归结为检测到null
值未设置,但您无法使用is_null()
检查未设置值。
我该如何解决这个问题?我错过了一些明显的东西吗我是否需要诉诸try catch
?
如果你很好奇,我会问这个问题,因为有一种情况,开发人员可以将变量传递给某个东西,我需要能够区分开发人员是否通过值传递变量或者NULL值或根本没有传递它。
答案 0 :(得分:1)
我能给出的最佳答案是,您不应该依赖于是否设置了某些内容,而是构建代码以使其始终设置。
刚看到你的编辑。
函数参数可以具有默认值,因此您知道它始终设置。 function myFun($variable = null)
将确保访问$ variable永远不会抛出异常。
编辑: 如果确实需要知道是否传入了参数,请使用func_get_args()。它返回一个数组,你可以检查它的大小。
function foo($bar) {
var_dump(func_get_args());
}
foo();
foo('foo');
给出输出:
array(0) {
}
array(1) {
[0] =>
string(3) "foo"
}
但是,顺便说一下,在没有参数的情况下调用foo()会发出错误:
PHP Warning: Missing argument 1 for foo(), called in /Users/pittsd/dev/cbsi/fly/cnet/expirement/expirement.php on line 6 and defined in /Users/pittsd/dev/cbsi/fly/cnet/expirement/expirement.php on line 2
Warning: Missing argument 1 for foo(), called in /Users/pittsd/dev/cbsi/fly/cnet/expirement/expirement.php on line 6 and defined in /Users/pittsd/dev/cbsi/fly/cnet/expirement/expirement.php on line 2
进一步回答你的问题:
<?php
function foo() {
if (func_get_args()) {
$value = func_get_args()[0];
if ($value === null) {
echo "Have a null value. ". PHP_EOL;
} else {
echo "Have a value: ".$value. PHP_EOL;
}
}
else {
echo "No value passed in.". PHP_EOL;
}
}
foo(null);
foo('foo');
foo();
输出:
Have a null value.
Have a value: foo
No value passed in.
答案 1 :(得分:1)
一般情况下,您可以通过这种方式执行支票,无任何例外:
if(isset($value)) {
if($value===null) {
// exists and null
}
else {
// exists and not null
}
}
else {
// doesn't exists
}
编辑:
正如您在评论中提到的,上面的代码不能用作例外,但是我有另一个解决方案来检查变量是否存在并且为null:
var_dump(array_key_exists('value', get_defined_vars())); // false
$value = null;
var_dump(array_key_exists('value', get_defined_vars())); // true
答案 2 :(得分:0)
if (!empty($value) ) // if is not empty
or
if (empty($value)) // if is empty
答案 3 :(得分:0)
未定义的变量错误是一个通知错误,不会停止执行脚本。
如果你使用try-catch {}围绕if子句,它都不会停止,所以你可以只是抑制这个错误。通常在生产环境中隐藏通知错误。
如果是以下代码,您的代码将完美无缺:
if($value == null) { // or @$value == null for suppressing this error ?
if (count(error_get_last()) == 0) {
echo 'null';
} else {
echo 'value is not set';
}
} else {
echo 'value is: '. $value;
}
您可以在测试null后检查是否有错误消息,如果有,则表示未设置。
让我们测试一下。
首先我们不传递任何东西。它打印:
value is not set
现在我们通过了$value = null;
。它打印:
null
现在我们通过了$value = 'something';
。它打印:
value is: something