我最近不得不为一份工作做一个“测试”,我得到反馈说这个陈述不正确:
$images = $flickr->get_images(5, !empty($_GET['pg']) ? $_GET['pg'] : 1);
“假定”错误是在第一次加载页面时通过三元运算符生成的,因为没有通过查询字符串传递的“?pg = 1”(或其他)。
反馈说我应该使用isset代替。我查看过这里的各个帖子(question 1960509)和博客,但找不到任何明确的答案。
这真的是一个错误吗?我该如何复制这个问题?我需要在我的php.ini文件中放置E_STRICT或其他东西吗?或者这可能是由于旧版本的PHP?
注意:请不要告诉我应该如何验证...我知道这...这是一个测试,看看我是否可以使用flickr api调用。
答案 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”是用于检查值是否设置的正确函数。