$ _GET [var]的isset或!为空

时间:2012-07-18 11:05:27

标签: php isset

我最近不得不为一份工作做一个“测试”,我得到反馈说这个陈述不正确:

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

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

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

这真的是一个错误吗?我该如何复制这个问题?我需要在我的php.ini文件中放置E_STRICT或其他东西吗?或者这可能是由于旧版本的PHP?

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

6 个答案:

答案 0 :(得分:4)

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

您可以将empty视为正常的isset支票,并与FALSE进行额外的宽松比较:

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

答案 1 :(得分:0)

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

没有确定你会得到错误,所以将它们结合起来

答案 2 :(得分:0)

我用

$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是此作业的预期功能。

答案 3 :(得分:0)

您会收到错误的原因是因为空函数用于检查现有变量的,而 isset()旨在告诉您是否一个变量已被实例化,但因为empty()是一种语言结构,从技术上说它不会抛出错误或产生警告,因此大多数人都看不到差异。

来自docs

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

答案 4 :(得分:0)

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

此外,我认为如果E_NOTICE开启(或者也可能是E_WARNING),这只会发出警告

答案 5 :(得分:0)

isset - 确定变量是否已设置且不为NULL。所以“isset”是用于检查值是否设置的正确函数。

更多详情:http://php.net/manual/en/function.isset.php

相关问题