PHP:什么是空()的替代方法,其中字符串“0”不被视为空?

php
2022-08-30 12:16:56

可能的重复:
修复PHP空函数

在PHP中,empty()是一个很好的快捷方式,因为它允许您同时检查变量是否被定义而不是为空。

当您不希望将“0”(作为字符串)视为空,但仍然希望将false,null,0和“”视为空时,您会使用什么?

也就是说,我只是想知道你是否有自己的捷径:

if (isset($myvariable) && $myvariable != "") ;// do something
if (isset($othervar  ) && $othervar   != "") ;// do something
if (isset($anothervar) && $anothervar != "") ;// do something
// and so on, and so on

我不认为我可以为此定义一个帮助器函数,因为变量可能是未定义的(因此不能作为参数传递)。


答案 1

这应该做你想做的事:

function notempty($var) {
    return ($var==="0"||$var);
}

编辑:我猜表格只在预览中工作,而不是在实际的答案提交中。因此,请参阅PHP类型比较表以获取更多信息。

notempty("")       : false
notempty(null)     : false
notempty(undefined): false
notempty(array())  : false
notempty(false)    : false
notempty(true)     : true
notempty(1)        : true
notempty(0)        : false
notempty(-1)       : true
notempty("1")      : true
notempty("0")      : true
notempty("php")    : true

基本上,notempty() 对于除“0”之外的所有值都与!empty()相同,它返回true


编辑:如果您使用的是error_reporting(E_ALL),则无法按值将未定义的变量传递给自定义函数。正如墨卡托所指出的,您应该始终使用E_ALL来遵守最佳实践。他提供的这个链接(注释#11)讨论了为什么出于性能和可维护性/调试原因,不应该使用任何形式的错误抑制。

请参阅 orlandu63 的答案,了解如何通过引用将参数传递给自定义函数。


答案 2
function isempty(&$var) {
    return empty($var) || $var === '0';
}

关键是运算符,它通过引用传递变量,如果它不存在,则创建它。&


推荐