isset or !empty for $_GET[var]


isset or !empty for $_GET[var]

我最近不得不为一项工作做一个"测试",我收到反馈说这句话不正确:

$images = $flickr->get_images(5, !empty($_GET['pg']) ? $_GET['pg'] : 1);

"假定"错误是在第一次加载页面时通过三元运算符生成的,因为查询字符串中没有传递"?pg=1"(或任何内容)。

反馈说我应该用isset代替。我看过这里的各种帖子(问题1960509)和博客,但找不到任何明确的答案。

这真的是个错误吗?如何复制此问题?我需要在php.ini文件中添加E_STRICT或其他内容吗?或者这可能是由于php的旧版本?

注意:请不要告诉我应该如何验证东西。。我知道。。。这是一个测试,只是看看我是否可以使用flickrAPI调用。

这非常好。empty不是一个实际的函数,它是一个语言构造。如果未设置变量,它不会发出警告(在这种情况下,变量被视为空,因此"函数"会根据您的需要返回TRUE),此外,它还会检查空值或零值。

您可以将empty视为正常的isset检查,并与FALSE:进行额外的松散比较

empty($var) === (!isset($var) || $var == FALSE)

$images=$flickr->get_images(5,(isset($_get['pg']&($_get['pg']))$_获取['pg']:1);

如果没有isset,你会得到错误,所以组合它们

我会使用

$images = $flickr->get_images(5, array_key_exists('pg', $_GET) ? $_GET['pg'] : 1);

如果需要,可与!empty($_GET['pg'])(即array_key_exists('pg', $_GET) && !empty($_GET['pg']))结合使用,但array_key_exists是此作业的预期功能。

我认为在这种情况下,isset是正确的函数,因为它检查数组元素的存在,而不是检查元素的值是否已设置。正如Martin所指出的,在这里最好的做法是将它们组合起来,因为这只会在元素存在的情况下检查值,这意味着在加载第一页时不会发生错误。

此外,我认为只有当E_NOTICE打开(或者可能也打开E_warning)

时,这才会发出警告

您会得到错误的原因是因为空函数是为了检查现有变量的而设计的,而arasisset()是为了告诉您变量是否已实例化,然而,由于empty()在技术上是一种语言构造,它不会抛出错误或创建警告,所以大多数人看不到区别。

来自文档:

empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set.

isset—确定变量是否已设置且不为NULL。因此,"isset"是用于检查值是否设置的正确函数。

更多详细信息:http://php.net/manual/en/function.isset.php