为什么要两次检查$ _GET?

时间:2015-08-22 10:08:12

标签: php get isset

我正在学习PHP,我希望你能解释为什么购物车教程的作者在调用时将产品添加到购物车中。

if(isset($_GET['action']) && $_GET['action']=="add")

网站会在处理之前检查$_GET[action]是否设置且$_GET[action]是否等于'add',但这在功能上并不等同于:

if($_GET['action']=="add")

因为如果值为“add”,则设置,如果未设置,则可能无法“添加”正确吗?或者我错过了什么?

5 个答案:

答案 0 :(得分:5)

不,那不一样 让我解释一下 1. isset检查键是否在数组中设置 2.双等于检查简单比较

答案 1 :(得分:4)

引用the documentation

  

尝试访问尚未定义的数组键与访问任何其他未定义的变量相同:将发出E_NOTICE级错误消息,结果将为NULL。

检查isset是一种很好的防御措施,可以防止日志被这些(无用的)邮件发送垃圾邮件。

答案 2 :(得分:1)

不,不一样。考虑一个查询字符串,例如?action=add&product=banana - 在这种情况下,语句if(isset($_GET['action']) && $_GET['action']=="add")将是有效的,然后一旦该条件被认为满足,脚本就可以处理所需的任何内容。如果省略action参数并使用查询字符串(如?product=banana&colour=red),则if语句将引发有关未定义索引的错误警告。

isset测试命名变量在$_GET数组中可用 - 或者您可以使用if( array_key_exists('action',$_GET) && $_GET['action']=='add' ){

答案 3 :(得分:0)

这是必要的,因为首先它将检查它是否已设置$_GET['action']表示它不为空,然后它检查它必须是值add然后执行某些代码,而不是值{{1} 1}}或其他任何内容。

答案 4 :(得分:0)

已经给出了答案,但是我想在使用&& 的情况下添加,如果左边的话,右手表达式将被执行表达式已经返回false。 因此,如果相应地设置了错误报告,以下内容仍会返回警告通知:

stage.maximizedProperty().addListener( (observable, oldValue, newValue) ->
{
    //. . .
});

您必须首先检查isset(),就像在代码示例中所做的那样。

有关PHP处理条件中逻辑运算符的方式的更多示例: http://php.net/manual/en/language.operators.logical.php#example-139