代码之家  ›  专栏  ›  技术社区  ›  Jake

为什么一个人会想使用isset而不是just$变量名称

  •  3
  • Jake  · 技术社区  · 12 年前

    我想知道为什么会有人想使用这个功能 isset 就在 ! 说一个变量没有设置或不存在。

    例如:

    <?php
        if(!$name){
            echo 'Name is not set';
        }
        if(isset($name) == false){
            echo 'Returned false';
        }
    ?>
    

    他们两个不会都被附和吗?有人告诉我,使用 isset公司 更好,但我不明白为什么。有人能解释一下吗?

    4 回复  |  直到 12 年前
        1
  •  3
  •   Altaf Hussain    12 年前

    如果我们直接使用$variableName,并且在该检查之前没有定义$variableName,那么 未定义的变量 php将生成警告。如果我们使用isset,那么如果变量之前定义过,那么它被设置了,isset将返回true,如果没有定义,那么isset将返false,因此没有 未定义的变量或索引 将生成警告。

    如果存在以前没有定义的情况,那么将isset与变量一起使用是一种很好的做法。

    <?php
        if(!$name){   //this will generate a warning
            echo 'Name is not set';
        }
        if(isset($name) == false){   //this will not as isset returns false
            echo 'Returned false';
        }
    ?>
    
        2
  •  1
  •   deceze    12 年前

    如果一个变量不存在,而您正试图访问它,这将生成一个警告:

    if ($foo) ... // E_NOTICE: Undefined variable foo
    

    此不存在的变量的值为 null 所以结果是一样的,这意味着 if 条件将不满足,代码也不会执行,但您会收到此警告,通知您潜在的问题(事实就是这样)。

    您使用 isset 以测试变量是否存在而不触发错误。您应该只将其用于您确实无法确定的变量。如果变量 应该 在代码中的某个点进行设置,您不需要 isset公司 ; 如果一个变量在应该存在的时候不存在,则需要一个警告通知。

        3
  •  1
  •   Tomás    12 年前

    未定义的值

    如果 $name 不是第一个定义的 if 将输出警告并返回 false . ( E_NOTICE )

    第二个 如果 将正常工作并将返回 虚假的 .

    布尔值

    如果 $名称 true 只有第二个 如果 将输出 echo .

    if(!$name){
        echo 'Name is not set';
    }
    
    if(isset($name) == false){
        echo 'Returned false';
    }
    

    因此 isset 与您想要从这个条件中检索到的内容更加一致。你只想看看 $名称 是否定义了值。

    整数值

    如果 $名称 0 第一个 如果 将输出未设置的名称,但第二个if将返回 真实的 ,因为变量 $名称 已设置。因此更加连贯。

    结论

    isset公司 更好,因为它能准确地完成您想要检索的内容和您想要的内容。

        4
  •  -1
  •   One Man Crew    12 年前

    这个 isset() 函数确定变量是否已设置且不为NULL。

    如果变量已被取消设置 unset() ,将不再设置。 isset() 如果测试一个已设置为NULL的变量,将返回FALSE。还要注意,NULL字节 ("\0") 不等同于PHP NULL常量。

    如果提供了多个参数,那么 isset() 只有在设置了所有参数的情况下才会返回TRUE。求值从左到右进行,一旦遇到未设置的变量,求值就会停止。

    如果您不使用 isset() 脚本将生成一个警告,带有 isset() 你可以防止这种情况发生。

    例如使用的理由 isset() 用于检测密钥是否在数组内。

    例如:

    <?php
    
    $a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));
    
    var_dump(isset($a['test']));            // TRUE
    var_dump(isset($a['foo']));             // FALSE
    var_dump(isset($a['hello']));           // FALSE
    
    // The key 'hello' equals NULL so is considered unset
    // If you want to check for NULL key values then try: 
    var_dump(array_key_exists('hello', $a)); // TRUE
    
    // Checking deeper array values
    var_dump(isset($a['pie']['a']));        // TRUE
    var_dump(isset($a['pie']['b']));        // FALSE
    var_dump(isset($a['cake']['a']['b']));  // FALSE
    
     if(!$a['hello']){   //this will display a warning: Undefined variable.
        echo 'hello is not set in the array';
    }
    ?>
    

    你的例子的问题在于运算符 ! 在PHP中是 NOT ,所以在这两行中,如果行在这里,你会得到相同的结果,但第一行会显示 未定义 变量警告,因为没有 $name 变量,第二个if即可 不是 $名称 变量

    <?php
        if(!$name){//this will display a warning: Undefined variable.
            echo 'Name is not set';
        }
    
         $name=0;
         if(!$name){//check the not value of $name.
            echo 'Name is true';
        }
    
    ?>
    
    推荐文章