访问可以为null的对象字段的更好方法

时间:2016-12-02 15:20:18

标签: php

我看到了这行代码,我问自己这个语法的原因

if(false && isset($_SESSION['new_user']) && $_SESSION['new_user'] == true)

基本上,上下文是如果我们有新用户,我们会以不同于现有用户的方式对待他。

我的第一个猜测是避免在null变量中搜索值。所以首先他测试是否有变量,如果有,他检查它的值。那是他做的吗?

但是同一个if语句中的所有内容。

我的问题是,如果if语句的第一部分为false,则第二部分未经过测试?这是一个好习惯吗?或者最好这样做:

if(($_SESSION['new_user']){
    if ($_SESSION['new_user'] == true){
        [...]
    }
}

2 个答案:

答案 0 :(得分:3)

您的解释是正确的。使用&&(AND)时,如果不满足第一个条件,则不会检查其他条件。

因此,只要您了解代码的工作原理,格式化if的方式无关紧要。

但是,在您的第一个示例中,false将确保条件永远不会成立。在这种情况下它很没用。

答案 1 :(得分:1)

如果IF语句中AND表达式的第一部分为false,则无需测试其余部分。所以这是正确的,并以这种方式使用。

因为

,IF语句总是返回false
if (false && ...)

所以if-block永远不会运行。这样做可以简单地排除运行代码而不删除代码(因为有些人可能稍后需要它)。这不是一个好的编程实践。

如果要检查值是否存在且不为空(在php false == empty中),可以执行以下操作以使查询更简单(省略第一个条件为false):

if (!empty($_SESSION['new_user'])) {
如果存在键,则

empty()隐式检查。这意味着你可以摆脱isset()。但这只适用于检查emtpy /非空值的情况。如果要检查特定ID,则必须使用

if (isset($_SESSION['new_user']) && $_SESSION['new_user'] == 'myNewUser') {