繁体   English   中英

$ _GET [var]的isset或!为空

[英]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?

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

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

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

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

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

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

我用了

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

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

来自文档

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM