PHP逻辑运算符需注意优先级与类型转换:&&和||优先级高于=,而and/or低于=;!判断空值不严谨,应依场景用isset()、empty()或===;条件串联推荐&&短路运算。

初学者学php逻辑运算符咋用_初学者学php逻辑运算符用法【实践】  第1张

PHP 逻辑运算符不是“背出来就能用”的东西,关键在什么时候该用 &&、什么时候不能用 and,以及为什么 ||or 在某些赋值场景下会出乎意料。

别混用 &&/||and/or,优先级真不一样

很多人写 $a = $b and $c; 想表达“先赋值再判断”,结果发现 $a 是布尔值而不是 $b 的值——因为 and 的优先级比 = 还低。

对比这两行:

$result = true && false;  // $result === false(正确按逻辑算)  
$result = true and false; // $result === true(先执行 $result = true,and 后半段被忽略)

实际开发中一律用 &&||,除非你明确需要低优先级做流程控制(极少见)。

!$var 判断空值不保险,初学者最容易踩的坑

if (!$user) 看似简洁,但 PHP 会把 0"0"[]nullfalse 全当 false。比如用户 ID 是数字 0,或接口返回字符串 "0",都会被误判为“没数据”。

更安全的写法取决于你要判断什么:

  • 是否为 null 或未定义:用 isset($var)!isset($var)
  • 是否为空数组或空字符串(且排除 0):用 empty($var) === false 配合类型检查
  • 是否严格等于 false:用 $var === false

别依赖 ! 做业务判断,尤其涉及数据库字段、API 返回值时。

&& 做条件串联比嵌套 if 更清晰

要检查用户登录态 + 权限 + 参数存在,不用三层 if

if ($user) {  
    if ($user['role'] === 'admin') {  
        if (isset($_GET['id'])) {  
            // 执行操作  
        }  
    }  
}

换成一行逻辑表达式更直观,也方便提前退出:

if ($user && $user['role'] === 'admin' && isset($_GET['id'])) {  
    // 执行操作  
}

注意:PHP 的 && 是短路运算,前面一个为 false,后面根本不会执行——所以 $user['role'] 不会因 $user 为空而报 Notice

逻辑运算符本身很简单,难的是结合 PHP 的松散类型、隐式转换和优先级规则做出稳定判断。写完记得用 var_dump() 测几个边界值:数字 0、字符串 "0"、空数组、nullfalse——它们在 !&&|| 下表现全不同。