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)