Php 变量是否已设置,是否为空?
试图确定某个变量是否为以下可能结果之一:Php 变量是否已设置,是否为空?,php,variables,null,conditional-statements,control-flow,Php,Variables,Null,Conditional Statements,Control Flow,试图确定某个变量是否为以下可能结果之一: 具有非空值 具有NULL值 一点也没有 我从这个开始: if ( isset($value) ) var_dump("It's set"); else var_dump("Not set"); 这包括变量是否已设置。但是,我还想讨论变量是否为null。了解以下情况: $value = null; var_dump( isset($value) ); // Returns false 因此,将返回一个未设置的空值。所以我不能这么做: if (
if ( isset($value) )
var_dump("It's set");
else
var_dump("Not set");
这包括变量是否已设置。但是,我还想讨论变量是否为null。了解以下情况:
$value = null;
var_dump( isset($value) ); // Returns false
因此,将返回一个未设置的空值。所以我不能这么做:
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");
}
也不能这样做:
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\u null()
检查未设置的值
我如何解决这个问题?我错过了什么明显的东西吗?我是否需要求助于试一试catch
如果你好奇的话,我问这个问题是因为有一种情况,开发者可以将变量传递给某个东西,我需要能够区分开发人员是用值还是空值传递变量,还是根本不传递变量。我能给出的最佳答案是,您不应该试图依赖于是否设置了某些内容,而应该构建代码,使其始终处于设置状态
if (!empty($value) ) // if is not empty
or
if (empty($value)) // if is empty
刚刚看到你的编辑
函数参数可以有一个默认值,以便您知道它始终处于设置状态函数myFun($variable=null)
将确保访问$variable不会引发异常
编辑:
如果确实需要知道是否传入了参数,请使用func\u get\u 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();
通常,您可以通过以下方式执行检查,无任何例外:
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
未定义变量错误是一个通知错误,不会停止脚本执行 如果您使用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=null代码>。它打印:
null
现在我们传递$value='something'代码>。它打印:
值是:有些东西
问题在于,在我的函数中,我特别需要知道用户是否实际传递了空值,或者他们是否根本没有传递空值。将默认值设置为null将无法确定。您可以使用另一个值作为默认值。如果你需要做一些完全不同的事情,如果他们不传入变量,这表明你需要一个单独的函数来完成这种情况下的工作。这并不完全是我需要的,但它给了我一些好主意。谢谢。与isset的问题相同。如果执行var_dump(空($value)),则为_null($value))代码>如果未设置变量,则它会引发异常。您可以使用!用isset清空你想要的。不在机器上进一步解释,抱歉$value=null;如果(isset($value)){echo'ok';}
结束,您将得到一个空白页面。isset()将在$value=null$value=null时返回false;var_转储(isset($value))代码>返回false。因此,如果($value==null)
块,代码将永远不会到达。