这篇文章上次修改于 940 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

顾名思义,empty是判断值是否为空,isset判断值是否存在.

在我处理$_GET时才第一次注意到它们的区别,大致的区别就是对于0和null的处理.

$idx = !empty($_GET['idx']) ? $_GET['idx'] : 0;

对于这个判断,当$_GET['idx']的值为0或者为null的情况下,empty的判断为true,因此$idx的值为0,我认为在处理$_GET数据时用这个是没问题的,但如果某个数据的值可能就是为0,那么由于为空判断为true,就需要三目运算来进行赋值了(就像上面那样),但很明显,在请求http://examplehost?idx=0时,$idx值虽然为0,但却是手动赋值的,这个0并不是从$_GET['idx']中得到的.


$idx = isset($_GET['idx']) ? $_GET['idx'] : 0;

对于这种情况,'?idx=0'时$idx的值为请求值,也就是0.但isset只会检查值是否存在,也就是说,对于http://examplehost?idx来说,isset判断也是true,这显然是不合逻辑的,只有当http://examplehost?other_request=idx这种情况isset判断才为false,作为开发者肯定是不希望程序出现报错的,所以一般使用empty进行判断更好,或者再配合isset三目运算等方法.