如果我输入它会更好:
if (ctype_alnum($x)) echo true;
而不是
if (isset($x) && ctype_alnum($x)) echo true;
我了解ctype_*
找到NULL
并将空字符串值设为false
,如果$x
没有,则不会给出错误消息存在,但这是否意味着我不应该使用isset()
?
或者我只是使用isset()
以防未来 PHP 更新改变了ctype_*
处理NULL
和空字符串值的方式?
答案 0 :(得分:2)
如果$x
未定义并且通知已开启,则会发出$x
未定义的通知。即使它们已经关闭,一个好的做法是在使用之前检查它。
<?php
echo ctype_alnum($x);
?>
结果:
<br />
<b>Notice</b>: Undefined variable: x in <b>[...][...]</b> on line <b>2</b><br />
答案 1 :(得分:1)
ctype_alnum(null);
// false
ctype_alnum('');
// false
ctype_alnum($x);
// Notice: Undefined variable: x [...]
当你说ctype_*
找到null
并且空字符串为false时你是对的,但是@Flash Tunder指出它会引发通知。
您应该知道您正在测试的变量是否存在,以及您是否已经知道应该使用isset()
进行检查。
答案 2 :(得分:0)
当然,检查$x
是否设置肯定会更好......但是,有关性能,isset()
或生成notice
的情况更糟糕的争论。
我可能会使用isset($x)
并检查但是:
...
if (@ctype_alnum($x)) echo true;
...
使用@
来抑制错误,可能是最好的。
编辑
不同之处在于,只要检查通知是否存在,抑制通知(通知!)就会花费100%。
所以...... isset($x)
就是。