我想检查数字变量是否有值(包括' 0' )并且不为空。空的意思是空(''),不是' 0'。
这真的是我用PHP做的最好吗?
if (isset($variable) && $variable !== '') { ... }
我想在没有为其编写功能的情况下进行一次检查...
答案 0 :(得分:2)
您要检查的是字符串长度,而不是"空"。这可以使用strlen()轻松完成。
if (isset($variable) && strlen($variable) > 0) {
// Do something
}
如果您想要将空格排除为无效,您也可以在其中添加trim()
(通常建议)。
if (isset($variable) && strlen(trim($variable)) > 0 } {
// ...
}
答案 1 :(得分:2)
是的,您的方式是最好的(最有效的)方式:
''
'0'
,0
,false
,null
或[]
在php中都被视为空,但您希望考虑如您的OP ''
(没有转换/转换) strlen
的使用也有效,但是如果你看一下生成的操作码,你会发现直接比较在计算上更有效3倍(假设所有操作都是相同的加权,如果像DO_FCALL
这样的操作比基本IS_NOT_IDENTICAL
检查需要更多的执行周期
!== ''
版本字节码:
IS_NOT_IDENTICAL ~1 !0, ''
strlen() > 0
版本字节码:
SEND_VAR !0
DO_FCALL 1 $1 'strlen'
IS_SMALLER ~2 $1, 0
答案 2 :(得分:2)
(答案已经过编辑。请参阅"三元操作"下面的其他内容。)
为什么要经历使用这一切的麻烦?
只需使用"非空" if(!empty($var)){...}
但是,如果你在GET数组中使用它,那么是;最好在条件语句中使用isset()
和empty()
。
我想检查变量是否有值(包括' 0')并且不为空
这对我来说是:
检查一个值是否有值且不为空(如您所写)并且代表包含0(零)。
因此:
if(!empty($var) && $var='0'){...}
我想在没有为其编写功能的情况下进行一次检查...
然后使用三元运算符。
然而"没有功能" ......对不起,你不能。你仍然需要"某种类型的功能"。
关于"三元运算符" 我在上面提到过。您可以引用所谓的"嵌套三元运算"在这两个Q& A的Stack上:
这样你就不需要自定义功能了。
答案 3 :(得分:2)
你能做的最好的事情就是制作你自己的自定义功能。关键是当您传递未定义的变量时,通过引用传递变量以不触发警告。在发布评论时,我会使用isset($variable) AND !empty($variable) AND !is_numeric($variable) AND $variable !== false
行中的内容来涵盖所有案例。
您的自定义功能可能如下所示(改进版):
function is_blank(&$variable) {
return (bool) !(isset($variable) AND (!empty($variable) OR is_numeric($variable) OR $variable === false));
}