isset
和之间的区别empty
很微妙但很重要。它们在单独使用时最相关。如果您正在检查一个变量是否存在并且是一个真实的值(例如,不是所有空格或 0 的任何字符串),您可以互换使用其中任何一个。
何时使用 isset
isset
当知道变量是否已定义且不为空很重要时使用:
if (isset($maybeExistsMaybeNull)) {
// variable defined and is not NULL
}
何时使用 !empty
!empty
当重要的是要知道变量是否已定义并且是真实的时使用
if (!empty($mightBeEmpty)) {
// variable defined, and isn't "", " ", 0, "0" etc.
}
!empty
是存在和是某物的一个很好的简写。
何时使用 array_key_exists
array_key_exists
当重要的是要知道键是否存在并且值不重要时使用:
if (array_key_exists('something', $array)) {
// $array['something'] exists, could be literally anything including null
}
何时不使用 isset
如果您的代码如下所示:
if (isset($something) && $something) {
// code is shorter with !empty
}
何时不使用 !empty
如果您的代码如下所示:
if (!empty($something) && $something === "") {
// you meant isset. this is unreachable.
}
然后你正在编写无法执行的代码
抛出错误的代码容易出错
避免编写发出您忽略的通知/警告的代码。例如在问题中:
if((isset($_GET[example]))&&($_GET['example']=='somevalue')){ ... }
示例的第一个用途是未声明的常量。或者它是未声明的 - 如果你define('example', "foo");
在代码中的其他地方有什么。
if($_GET['example']=='somevalue'){ ... }
如果 url 不包含?example=..
那也将发出通知。
编写代码而不显示错误意味着您很容易错过第一个错误。
在上下文中: isset 和 !empty 是等价的
对于给出的示例,这两种语言结构的行为完全相同。
没有任何情况下一个人的行为会与另一个人不同,如果变量未定义,也不会发出通知,并且两者之间的性能没有可测量的差异。