我应该使用isset()与ctype_ *?

时间:2018-01-08 17:25:55

标签: php

如果我输入它会更好:

if (ctype_alnum($x)) echo true;

而不是

if (isset($x) && ctype_alnum($x)) echo true;

我了解ctype_*找到NULL并将空字符串值设为false,如果$x没有,则不会给出错误消息存在,但这是否意味着我不应该使用isset()

或者我只是使用isset()以防未来 PHP 更新改变了ctype_*处理NULL和空字符串值的方式?

3 个答案:

答案 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;
...

使用@来抑制错误,可能是最好的。

根据此link

编辑

  

不同之处在于,只要检查通知是否存在,抑制通知(通知!)就会花费100%。

所以...... isset($x)就是。