我在之前的帖子中搜索过并看过类似的讨论,但这个问题从未得到满意的回答。从本质上讲,我在PHP中寻找一种快速,优雅和简单的方法来提出问题'这是否存在,如果存在,它是否具有非零,非空值?&# 39; 不在非对象"属性中发出通知场景或未定义的变量。
以下是我测试过的场景和几个版本:
// Setting up
$a = ['key' => 'value', 'otherKey' => 'otherValue', 'sub' => ['key' => 'value']];
$b = 0;
$c = 123;
$d = 'string';
$e = (object) $a;
// my tests:
!! $b
=> false
!! $c
=> true
!! $a['key']
=> true
!! $a['notExist']
=> PHP Notice: Trying to get property of non-object on line 1
!! $e->key
=> true
!! $e->notExist
=> PHP Notice: Trying to get property of non-object on line 1
!! $f
=> PHP Notice: Trying to get property of undefined variable on line 1
我用isset(),empty()和各种各样的东西做了同样的事情。我设法通过构建一个检查类型,遍历名称空间的函数来构建一个有点可行的版本,并尝试做各种各样的伏都教到你投掷它的论点上,但感觉它不应该那么复杂。
真的没有更好的方式来询问"这是否存在并且是否设置为非零,非空值?"
答案 0 :(得分:2)
您仍然可以使用empty
。正如文档所述:
确定变量是否为空。如果变量不存在或者其值等于FALSE,则该变量被视为空。如果变量不存在,empty()不会生成警告。
然后我们可以检查PHP converts values to booleans:
的方式转换为布尔值时,以下值被视为FALSE:
- 布尔值FALSE本身
- 整数0(零)
- 浮点数0.0(零)
- 空字符串,字符串" 0"
- 零元素的数组
- 特殊类型NULL(包括未设置变量)
- 从空标签创建的SimpleXML对象
每个其他值都被视为TRUE(包括任何资源和NAN)。
所以,即使任何级别都不存在,你应该只对!empty
有好处,例如:
!empty($foo)
!empty($foo->bar->num1)
!empty($foo['bar']['num1'])
以上都不会显示警告。
现在,谈到功能,我们无法真正使用empty
来检查它的存在。为此,我们需要更加具体:function_exists
或类似的内容,例如method_exists
。
答案 1 :(得分:0)
一般来说,我去的是
if ( isset( $var) && $var !== 0 )
{
// condition met
}
如果未设置该值,则简写AND运算符将结束,如果已设置,则它将检查NULL值。速记检查应防止未设置变量的错误。