PHP基础教程(35)PHP赋值运算符:别再用“=”傻傻赋值了!PHP赋值运算符的偷懒哲学,让你代码效率翻倍

一、开篇:你以为的赋值,真的只是“赋值”吗?

朋友们,今天咱们来聊点PHP里看似“小儿科”,但实际上能让你代码水平立马上一个台阶的东西——赋值运算符。

说句大实话,我见过太多PHP开发者(包括曾经的我),写了几年代码,对待赋值还停留在“等号大法好”的阶段。变量赋值?$a = 1;;变量计算后再赋值?$a = $a + 1;。看起来没毛病是吧?但你知道吗,这种写法就像你每天用算盘算账,虽然也能算出结果,但看到别人用计算器时的效率,会不会觉得自己像个“古典程序员”?

赋值运算符,其实就是PHP给你的“计算器”。它不仅能赋值,还能顺便把计算给做了。今天咱们就把它扒个底朝天,让你看看这个平时不起眼的小东西,到底藏着多少让你代码变优雅的魔法。

先来个灵魂拷问:下面两种写法,你平时用哪种?

// 写法A:传统老实人
$money = 100;
$money = $money + 50; // 发工资了!
$money = $money - 30; // 交房租
$money = $money * 1.1; // 理财收益

// 写法B:高效“偷懒者”
$money = 100;
$money += 50;  // 发工资,简简单单
$money -= 30;  // 交房租,一目了然
$money *= 1.1; // 理财,干净利落

如果你的答案主要是A,那么恭喜你,看完这篇文章,你的代码行数至少能减少20%!这可不是夸张,而是赋值运算符带来的实实在在的效率提升。

二、基础篇:从“=”说起的赋值那些事儿

1. 等号(=):一切故事的开始

咱们先聊聊最基础的=。虽然它简单,但有几个坑你肯定踩过:

// 基础赋值,这个大家都会
$name = "王大锤";
$age = 28;
$isProgrammer = true;

// 但这里有个经典误区!
if ($a = 5) { // 注意,这里是一个等号!
    echo "这行总会执行,因为赋值表达式返回赋值后的值5,非零即真";
}

// 正确比较应该用两个等号
if ($a == 5) {
    echo "这才是比较";
}

// 连续赋值:从右往左的“传包裹”游戏
$x = $y = $z = 0;
// 等价于:
// $z = 0;
// $y = $z; // $y变成0
// $x = $y; // $x也变成0

生活化比喻:把=想象成快递小哥。$name = "王大锤"就像是快递小哥把“王大锤”这个包裹送到$name这个地址。而连续赋值$x = $y = 0就像快递小哥先送0给$y,然后复制一份再送给$x

2. 组合赋值运算符:你的代码“瘦身神器”

好了,重头戏来了!组合赋值运算符是今天的主角,它们能让你告别重复写变量名的“啰嗦病”。

(1)+=-=:财务小助手

// 场景:记账APP开发
$balance = 1000; // 初始余额

// 收入流水
$balance += 500;   // 发工资:$balance = $balance + 500;
$balance += 300;   // 兼职收入
$balance += 200;   // 理财收益

// 支出流水
$balance -= 150;   // 交水电费
$balance -= 80;    // 买咖啡
$balance -= 200;   // 请女朋友吃饭(如果有的话)

echo "当前余额:¥" . $balance; // 输出:当前余额:¥1570

// 有趣用法:不只是数字,数组也能用!
$visits = ["首页" => 0, "产品页" => 0, "关于页" => 0];
$visits["首页"] += 1;   // 有人访问首页
$visits["产品页"] += 3; // 产品页很受欢迎
$visits["首页"] += 2;   // 首页又来了两人

print_r($visits);

(2)*=/=:比例调整大师

// 场景:电商价格调整
$price = 100;

// 打折季来了!
$price *= 0.8;   // 8折:$price = $price * 0.8;
$price *= 0.9;   // 折上9折
echo "折后价:¥" . $price; // 输出:72

// 恢复原价计算
$discountedPrice = 72;
$originalPrice = $discountedPrice;
$originalPrice /= 0.9;  // 除以折扣
$originalPrice /= 0.8;
echo "原价应该是:¥" . $originalPrice; // 输出:100

// 实用案例:按比例缩放图片尺寸
$width = 800;
$height = 600;

// 等比例缩放50%
$width *= 0.5;
$height *= 0.5;
echo "缩放后尺寸:{$width}x{$height}"; // 输出:400x300

(3)%=:周期计算小能手

// 场景1:计算星期几
$daysPassed = 100; // 从某天起过了100天
$weekday = 1;      // 假设开始是星期一(1代表周一)

$weekday += $daysPassed;
$weekday %= 7;     // 对7取余,$weekday = $weekday % 7;

if ($weekday == 0) $weekday = 7; // 余数0代表周日,我们换成7
echo "100天后是星期" . $weekday;

// 场景2:轮询任务分配
$totalServers = 5;
$taskId = 18;

$target
赋值运算符用于将一个值赋给变量,不同的赋值运算符有不同的功能: - **简单赋值运算符(=)**:将右侧表达式的值赋给左侧的变量。例如,在C语言中`int a = 10;`,将10赋值给变量`a` [^4]。 - **复合算术赋值运算符(+=、-=、*=、/=、%=)**:是算术运算和赋值运算的组合。 - `+=`:将变量的值与右侧表达式的值相加,然后将结果赋给该变量。例如`a += 5;`等价于`a = a + 5;`。 - `-=`:将变量的值减去右侧表达式的值,然后将结果赋给该变量。例如`a -= 3;`等价于`a = a - 3;`。 - `*=`:将变量的值乘以右侧表达式的值,然后将结果赋给该变量。例如`a *= 2;`等价于`a = a * 2;`。 - `/=`:将变量的值除以右侧表达式的值,然后将结果赋给该变量。在C语言中,若为整数相除,进行整除操作;若至少有一个浮点数,则进行浮点数除法。例如`a /= 4;`等价于`a = a / 4;` [^4]。 - `%=`:将变量的值对右侧表达式的值取模,然后将结果赋给该变量。例如`a %= 3;`等价于`a = a % 3;`。 - **复合位赋值运算符(<<=、>>=、&=、^=)** :是位运算和赋值运算的组合 [^1]。 - `<<=`:左移赋值运算,将变量的二进制位向左移动指定的位数,然后将结果赋给该变量。 - `>>=`:右移赋值运算,将变量的二进制位向右移动指定的位数,然后将结果赋给该变量。 - `&=`:与运算赋值,将变量和右侧表达式按位与运算,然后将结果赋给该变量。 - `^=`:异或运算赋值,将变量和右侧表达式按位异或运算,然后将结果赋给该变量。 - **不等于运算符(!=)**:在关系运算里,`!=`用于比较两个值是否不相等,其优先级低于算术运算符和赋值运算符,但高于逻辑运算符(如`&&`和`||`)。例如在JAVA中,`int a = 10; int b = 5; boolean result = (a != b);`,这里`result`的值为`true`,因为`a`和`b`的值不相等 [^3]。 在运算符重载方面,`!=` 运算符通常可复用 `==` 运算符来实现,例如在C++中重载`!=`运算符: ```cpp class Person { public: bool operator==(const Person& other) const { // 具体的比较逻辑 return true; } bool operator!=(const Person& other) const { return !(*this == other); } }; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值