PHP逻辑运算符与短路求值逻辑运算符的短路求值特性在某些场景下很有用。今天说说PHP中逻辑运算符的使用和短路求值的应用。基本逻辑运算符。php$a true;$b false;var_dump($a $b); // falsevar_dump($a || $b); // truevar_dump(!$a); // falsevar_dump($a and $b); // falsevar_dump($a or $b); // truevar_dump($a xor $b); // true?短路求值。phpfunction first(): bool{echo first()被调用\n;return false;}function second(): bool{echo second()被调用\n;return true;}// 短路第一个为false第二个不会执行$result first() second();echo 结果: . ($result ? true : false) . \n\n;// || 短路第一个为true第二个不会执行function third(): bool{echo third()被调用\n;return true;}function fourth(): bool{echo fourth()被调用\n;return false;}$result2 third() || fourth();echo 结果: . ($result2 ? true : false) . \n;?短路求值的实用场景。php// 安全调用$user getUser();if ($user ! null $user-isActive()) {echo 用户活跃\n;}// 使用 代替 if$user ! null $user-isActive() sendEmail($user);// 默认值$name $input[name] || 默认名;$config $userConfig || $defaultConfig;// 早期返回function processOrder(?array $order): void{$order ! null || throw new InvalidArgumentException(订单不存在);$order[status] pending || throw new RuntimeException(订单状态不对);// 处理...}?逻辑运算符和赋值组合。php// ?? 空合并赋值$name ?? 默认名;// 逻辑与赋值$user-isAdmin $user-isActive();// || 逻辑或赋值$cache || loadFromDatabase();// ? 三元运算符简化$result $condition ? $value1 : $value2;?多个条件的顺序。phpfunction complexCheck(array $data): bool{// 把开销小的条件放前面利用短路减少计算return count($data) 0 $data[status] active $this-expensiveCheck($data);}?and/or的优先级低于赋值。php$result true and false; // 相当于 ($result true) and falsevar_dump($result); // true$result2 true false;var_dump($result2); // false// 建议用和||代替and/or避免优先级问题?短路求值可以提高效率。利用短路特性可以避免不必要的函数调用。将其用在安全调用防止空指针。and/or的优先级与/||不同注意区分。合理使用短路求值让代码更简洁高效。
PHP逻辑运算符与短路求值
PHP逻辑运算符与短路求值逻辑运算符的短路求值特性在某些场景下很有用。今天说说PHP中逻辑运算符的使用和短路求值的应用。基本逻辑运算符。php$a true;$b false;var_dump($a $b); // falsevar_dump($a || $b); // truevar_dump(!$a); // falsevar_dump($a and $b); // falsevar_dump($a or $b); // truevar_dump($a xor $b); // true?短路求值。phpfunction first(): bool{echo first()被调用\n;return false;}function second(): bool{echo second()被调用\n;return true;}// 短路第一个为false第二个不会执行$result first() second();echo 结果: . ($result ? true : false) . \n\n;// || 短路第一个为true第二个不会执行function third(): bool{echo third()被调用\n;return true;}function fourth(): bool{echo fourth()被调用\n;return false;}$result2 third() || fourth();echo 结果: . ($result2 ? true : false) . \n;?短路求值的实用场景。php// 安全调用$user getUser();if ($user ! null $user-isActive()) {echo 用户活跃\n;}// 使用 代替 if$user ! null $user-isActive() sendEmail($user);// 默认值$name $input[name] || 默认名;$config $userConfig || $defaultConfig;// 早期返回function processOrder(?array $order): void{$order ! null || throw new InvalidArgumentException(订单不存在);$order[status] pending || throw new RuntimeException(订单状态不对);// 处理...}?逻辑运算符和赋值组合。php// ?? 空合并赋值$name ?? 默认名;// 逻辑与赋值$user-isAdmin $user-isActive();// || 逻辑或赋值$cache || loadFromDatabase();// ? 三元运算符简化$result $condition ? $value1 : $value2;?多个条件的顺序。phpfunction complexCheck(array $data): bool{// 把开销小的条件放前面利用短路减少计算return count($data) 0 $data[status] active $this-expensiveCheck($data);}?and/or的优先级低于赋值。php$result true and false; // 相当于 ($result true) and falsevar_dump($result); // true$result2 true false;var_dump($result2); // false// 建议用和||代替and/or避免优先级问题?短路求值可以提高效率。利用短路特性可以避免不必要的函数调用。将其用在安全调用防止空指针。and/or的优先级与/||不同注意区分。合理使用短路求值让代码更简洁高效。