3

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

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

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

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

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

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

4

6 回答 6

4

这很好。empty不是一个实际的功能,它是一种语言结构。如果未设置变量,它不会发出警告(在这种情况下,变量被认为是空的,因此“函数”会TRUE按您的意愿返回),此外它还会检查空值或零值。

您可以将empty其视为正常isset检查,并与以下内容进行松散比较FALSE

empty($var) === (!isset($var) || $var == FALSE)
于 2012-07-18T11:09:37.890 回答
0

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

没有isset你会得到错误所以结合他们

于 2012-07-18T11:08:01.093 回答
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是这项工作的预期功能。

于 2012-07-18T11:10:53.903 回答
0

您会收到错误的原因是因为 empty 函数旨在检查现有变量的值,whearas isset()旨在告诉您变量是否已被实例化,但是因为 empty() 在技术上是一种语言结构不会抛出错误或创建警告,因此大多数人看不到差异。

文档

empty() is the opposite of (boolean) var, except that no warning is generated when the variable is not set.
于 2012-07-18T11:11:56.003 回答
0

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

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

于 2012-07-18T11:12:21.613 回答
0

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

更多细节: http: //php.net/manual/en/function.isset.php

于 2012-07-18T11:18:47.377 回答