news 2026/6/7 12:40:30

PHP逻辑运算符与短路求值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
PHP逻辑运算符与短路求值

PHP逻辑运算符与短路求值

逻辑运算符的短路求值特性在某些场景下很有用。今天说说PHP中逻辑运算符的使用和短路求值的应用。

基本逻辑运算符。

```php
$a = true;
$b = false;

var_dump($a && $b); // false
var_dump($a || $b); // true
var_dump(!$a); // false
var_dump($a and $b); // false
var_dump($a or $b); // true
var_dump($a xor $b); // true
?>

短路求值。

```php
function 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;
?>

多个条件的顺序。

```php
function complexCheck(array $data): bool
{
// 把开销小的条件放前面,利用短路减少计算
return count($data) > 0
&& $data['status'] === 'active'
&& $this->expensiveCheck($data);
}
?>

and/or的优先级低于赋值。

```php
$result = true and false; // 相当于 ($result = true) and false
var_dump($result); // true

$result2 = true && false;
var_dump($result2); // false

// 建议用&&和||代替and/or,避免优先级问题
?>

短路求值可以提高效率。利用短路特性可以避免不必要的函数调用。将其用在安全调用防止空指针。and/or的优先级与&&/||不同,注意区分。合理使用短路求值让代码更简洁高效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 12:40:26

从《半日》到代码人生:一个程序员如何用技术思维解读“时间感知”与“环境剧变”

从《半日》到代码人生:技术思维下的时间感知与环境适应1. 当文学隐喻遇上技术迭代纳吉布马哈福兹在《半日》中描绘了一个男孩在半天内经历从入学到暮年的超现实体验。这种时间压缩的震撼感,与程序员打开三年前自己写的代码时的感受惊人相似——那些曾经熟…

作者头像 李华
网站建设 2026/6/7 12:39:19

FPGA IO设计实战:Cyclone II引脚配置、高速接口与信号完整性解析

1. 项目概述:深入理解Cyclone II的IO资源作为一名在数字电路设计领域摸爬滚打了十多年的工程师,我深知FPGA项目成败的关键,往往不在于内部逻辑设计得多么精妙,而在于与外部世界“握手”的接口——也就是IO(Input/Outpu…

作者头像 李华
网站建设 2026/6/7 12:38:04

从欧司朗Ostar LED看大功率照明技术演进与工程挑战

1. 项目背景与行业意义2007年初,当我在翻阅一份行业期刊时,一条来自欧司朗的简短新闻引起了我的注意。它宣称推出了一款光通量超过1000流明的LED,亮度足以超越当时主流的50瓦卤素灯。这在今天看来或许稀松平常,但在当时&#xff0…

作者头像 李华
网站建设 2026/6/7 12:37:37

恶意软件家族深度解析:从病毒、木马到蠕虫的工程化查杀实战

1. 恶意软件家族:从概念到实战的深度拆解在数字世界里,我们工程师每天打交道的不只是代码、电路和协议,还有一群看不见的“访客”——恶意软件。无论是调试嵌入式设备的固件,还是分析智能手机应用的网络行为,亦或是维护…

作者头像 李华