Php 我应该将isset()与ctype_*一起使用吗?
如果我输入:Php 我应该将isset()与ctype_*一起使用吗?,php,Php,如果我输入: if (ctype_alnum($x)) echo true; 而不是 if (isset($x) && ctype_alnum($x)) echo true; ? 我知道ctype.*发现NULL和空字符串值为false,如果$x不存在,它不会给出错误消息,但这是否意味着我不应该使用isset() 或者我只是使用isset()以防万一将来的PHP更新改变了ctype.*处理NULL和空字符串值的方式?当$x未定义且通知打开时,它会抛出一个通知,$x未定义。即
if (ctype_alnum($x)) echo true;
而不是
if (isset($x) && ctype_alnum($x)) echo true;
?
我知道
ctype.*
发现NULL
和空字符串值为false
,如果$x
不存在,它不会给出错误消息,但这是否意味着我不应该使用isset()
或者我只是使用
isset()
以防万一将来的PHP更新改变了ctype.*
处理NULL
和空字符串值的方式?当$x
未定义且通知打开时,它会抛出一个通知,$x
未定义。即使它们是关闭的,一个好的做法是在使用前检查它
<?php
echo ctype_alnum($x);
?>
结果:
<br />
<b>Notice</b>: Undefined variable: x in <b>[...][...]</b> on line <b>2</b><br />
注意:未定义的变量:第2行[…][…]中的x
ctype_alnum(空);
//假的
ctype_alnum(“”);
//假的
ctype_alnum($x);
//注意:未定义变量:x[…]
当您说ctype*
发现null
和空字符串为false时,您是正确的,但正如@Flash Tunder所指出的,这将引起注意
您应该知道您正在测试的变量是否存在,如果您还不知道应该使用
isset()
检查$x
是否已设置,那么肯定会更好。。。但是,关于哪个性能更差,isset()
还是产生一个通知
,还有一个争论
我可能会使用isset($x)并检查,但:
...
if (@ctype_alnum($x)) echo true;
...
最好使用@
来抑制错误
编辑:根据此
不同的是,抑制通知(一个通知!)只需先检查它是否存在,就需要100%的时间
所以
isset($x)
它是。当你说Empty
时,你是指一个未定义的变量还是一个空字符串('
)?@JamesFenwick'
没有空格,为什么不使用!空($x)
?它不会抱怨不存在variable@Justinas我会使用它,但令我惊讶的是,当变量不存在时,我没有从ctype.*
和@James Fenwick answer中得到任何通知,当我设置错误报告(E\u ALL)时,它实际上出现了学术问题:哪一个更有效;吞下通知
或检查isset()
?检查isset()
。。。将PHP设置为不显示“错误”并不意味着它不处理这些错误。如果您谈论的是性能,那么使用@
可能是最糟糕的方法。它倾向于阻止编译器进行各种优化,因为它有效地用$temp=error\u报告(0)将代码括起来代码>和错误报告($temp)代码>我实际上刚刚发现并编辑了我的答案。(y)