我需要检查值是否定义为任何值,包括null.isset将null值视为未定义并返回false.以下面的例子为例:
$foo = null;
if(isset($foo)) // returns false
if(isset($bar)) // returns false
if(isset($foo) || is_null($foo)) // returns true
if(isset($bar) || is_null($bar)) // returns true, raises a notice
Run Code Online (Sandbox Code Playgroud)
请注意,这$bar是未定义的.
我需要找到满足以下条件的条件:
if(something($bar)) // returns false;
if(something($foo)) // returns true;
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Hen*_*pel 79
IIRC,您可以使用get_defined_vars()此:
$foo = NULL;
$vars = get_defined_vars();
if (array_key_exists('bar', $vars)) {}; // Should evaluate to FALSE
if (array_key_exists('foo', $vars)) {}; // Should evaluate to TRUE
Run Code Online (Sandbox Code Playgroud)
Joh*_*lia 25
如果您正在处理可能具有NULL值的对象属性,则可以使用:property_exists()而不是isset()
<?php
class myClass {
public $mine;
private $xpto;
static protected $test;
function test() {
var_dump(property_exists($this, 'xpto')); //true
}
}
var_dump(property_exists('myClass', 'mine')); //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto')); //true, as of PHP 5.3.0
var_dump(property_exists('myClass', 'bar')); //false
var_dump(property_exists('myClass', 'test')); //true, as of PHP 5.3.0
myClass::test();
?>
Run Code Online (Sandbox Code Playgroud)
与isset()相反,即使属性值为NULL,property_exists()也返回TRUE.
Loï*_*ier 13
请参阅测试PHP中变量存在的最佳方法; isset()显然已被打破
if( array_key_exists('foo', $GLOBALS) && is_null($foo)) // true & true => true
if( array_key_exists('bar', $GLOBALS) && is_null($bar)) // false & => false
Run Code Online (Sandbox Code Playgroud)
我在寻找数组的解决方案时发现了这个主题。检查是否存在包含 NULL 的数组元素,这种构造帮助了我
$arr= [];
$foo = 'foo';
$arr[$foo]= NULL;
if (array_key_exists('bar', $arr)) {}; // Should evaluate to FALSE
if (array_key_exists('foo', $arr)) {}; // Should evaluate to TRUE
if (array_key_exists($foo, $arr)) {}; // Should evaluate to TRUE
Run Code Online (Sandbox Code Playgroud)
我发现这compact是一个忽略未设置变量但确实对设置为的变量起作用的函数null,因此当您有一个大型本地符号表时,我想您可以 array_key_exists('foo', get_defined_vars())通过使用以下方法获得比检查更有效的解决方案array_key_exists('foo', compact('foo')):
$foo = null;
echo isset($foo) ? 'true' : 'false'; // false
echo array_key_exists('foo', compact('foo')) ? 'true' : 'false'; // true
echo isset($bar) ? 'true' : 'false'; // false
echo array_key_exists('bar', compact('bar')) ? 'true' : 'false'; // false
Run Code Online (Sandbox Code Playgroud)
更新
从 PHP 7.3 开始,compact()将对未设置的值发出通知,因此不幸的是,这种替代方法不再有效。
如果给定字符串引用未设置的变量,compact() 现在会发出 E_NOTICE 级别错误。以前,此类字符串已被默默地跳过。
| 归档时间: |
|
| 查看次数: |
53515 次 |
| 最近记录: |