运算符是PHP编程语言中用于执行各种操作的符号。它们允许我们对变量和值进行算术运算、比较、赋值等操作。掌握PHP运算符是学习PHP编程的基础,本章将详细介绍PHP中各类运算符的使用方法。
算术运算符用于执行基本的数学运算,如加法、减法、乘法和除法等。
| 运算符 | 名称 | 描述 | 实例 | 结果 |
|---|---|---|---|---|
| x + y | 加 | x 和 y 的和 | 2 + 2 | 4 |
| x - y | 减 | x 和 y 的差 | 5 - 2 | 3 |
| x * y | 乘 | x 和 y 的积 | 5 * 2 | 10 |
| x / y | 除 | x 和 y 的商 | 15 / 5 | 3 |
| x % y | 模(取余) | x 除以 y 的余数 | 5 % 2 10 % 8 10 % 2 |
1 2 0 |
| - x | 取反 | x 取反 | - 2 | -2 |
| a . b | 并置 | 连接两个字符串 | "Hi" . "Ha" | HiHa |
<?php
// 算术运算符示例
$x = 10;
$y = 6;
echo "加法: " . ($x + $y) . "\n"; // 输出 16
echo "减法: " . ($x - $y) . "\n"; // 输出 4
echo "乘法: " . ($x * $y) . "\n"; // 输出 60
echo "除法: " . ($x / $y) . "\n"; // 输出 1.6666666666667
echo "取余: " . ($x % $y) . "\n"; // 输出 4
// 字符串连接示例
$str1 = "Hello";
$str2 = "World";
echo "字符串连接: " . $str1 . " " . $str2; // 输出 Hello World
?>
注意: 在PHP中,点号(.)运算符用于字符串连接,而不是加号(+)。使用加号连接字符串会导致类型转换,可能产生意想不到的结果。
赋值运算符用于将值赋给变量。最基本的赋值运算符是"=",它将右侧表达式的值赋给左侧的变量。
| 运算符 | 等同于 | 描述 |
|---|---|---|
| x = y | x = y | 左操作数被设置为右侧表达式的值 |
| x += y | x = x + y | 加法赋值 |
| x -= y | x = x - y | 减法赋值 |
| x *= y | x = x * y | 乘法赋值 |
| x /= y | x = x / y | 除法赋值 |
| x %= y | x = x % y | 取余赋值 |
| a .= b | a = a . b | 字符串连接赋值 |
<?php
// 基本赋值
$x = 10;
echo "x = " . $x . "\n"; // 输出 10
// 复合赋值运算符
$y = 20;
$y += 100; // 等同于 $y = $y + 100
echo "y += 100: " . $y . "\n"; // 输出 120
$z = 50;
$z -= 25; // 等同于 $z = $z - 25
echo "z -= 25: " . $z . "\n"; // 输出 25
$i = 5;
$i *= 6; // 等同于 $i = $i * 6
echo "i *= 6: " . $i . "\n"; // 输出 30
$j = 10;
$j /= 5; // 等同于 $j = $j / 5
echo "j /= 5: " . $j . "\n"; // 输出 2
$k = 15;
$k %= 4; // 等同于 $k = $k % 4
echo "k %= 4: " . $k . "\n"; // 输出 3
// 字符串连接赋值
$text = "Hello";
$text .= " World!"; // 等同于 $text = $text . " World!"
echo $text; // 输出 Hello World!
?>
递增和递减运算符用于对变量的值进行加1或减1操作,在循环和计数器中特别有用。
| 运算符 | 名称 | 描述 |
|---|---|---|
| ++ x | 预递增 | x 加 1,然后返回 x |
| x ++ | 后递增 | 返回 x,然后 x 加 1 |
| -- x | 预递减 | x 减 1,然后返回 x |
| x -- | 后递减 | 返回 x,然后 x 减 1 |
<?php
// 递增运算符示例
$x = 10;
echo "预递增: " . ++$x . "\n"; // 输出 11 (先加1再输出)
echo "当前值: " . $x . "\n"; // 输出 11
$y = 10;
echo "后递增: " . $y++ . "\n"; // 输出 10 (先输出再加1)
echo "当前值: " . $y . "\n"; // 输出 11
// 递减运算符示例
$z = 5;
echo "预递减: " . --$z . "\n"; // 输出 4 (先减1再输出)
echo "当前值: " . $z . "\n"; // 输出 4
$i = 5;
echo "后递减: " . $i-- . "\n"; // 输出 5 (先输出再减1)
echo "当前值: " . $i . "\n"; // 输出 4
// 在循环中的应用
echo "使用后递增的循环: ";
for($j = 0; $j < 5; $j++) {
echo $j . " ";
}
// 输出: 0 1 2 3 4
?>
重要提示: 预递增/递减与后递增/递减的区别在于返回值的时间点。预操作先执行运算再返回值,后操作先返回值再执行运算。在复杂表达式中使用时要特别注意这一点。
比较运算符用于比较两个值,返回布尔值(true或false)。在条件语句和循环中经常使用。
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| x == y | 等于 | 如果 x 等于 y,则返回 true | 5==8 返回 false |
| x === y | 恒等于 | 如果 x 等于 y,且它们类型相同,则返回 true | 5==="5" 返回 false |
| x != y | 不等于 | 如果 x 不等于 y,则返回 true | 5!=8 返回 true |
| x <> y | 不等于 | 如果 x 不等于 y,则返回 true | 5<>8 返回 true |
| x !== y | 不恒等于 | 如果 x 不等于 y,或它们类型不相同,则返回 true | 5!=="5" 返回 true |
| x > y | 大于 | 如果 x 大于 y,则返回 true | 5>8 返回 false |
| x < y | 小于 | 如果 x 小于 y,则返回 true | 5<8 返回 true |
| x >= y | 大于等于 | 如果 x 大于或者等于 y,则返回 true | 5>=8 返回 false |
| x <= y | 小于等于 | 如果 x 小于或者等于 y,则返回 true | 5<=8 返回 true |
<?php
// 比较运算符示例
$a = 5;
$b = "5";
$c = 10;
// 松散比较(只比较值)
var_dump($a == $b); // bool(true)
var_dump($a == $c); // bool(false)
// 严格比较(比较值和类型)
var_dump($a === $b); // bool(false)
var_dump($a === 5); // bool(true)
// 不等于比较
var_dump($a != $c); // bool(true)
var_dump($a != $b); // bool(false)
// 严格不等于
var_dump($a !== $b); // bool(true)
// 大小比较
var_dump($a > $c); // bool(false)
var_dump($a < $c); // bool(true)
var_dump($a >= 5); // bool(true)
var_dump($a <= 4); // bool(false)
// 实际应用:条件判断
$age = 18;
if($age >= 18) {
echo "您已成年";
} else {
echo "您未成年";
}
?>
类型转换提示: PHP是弱类型语言,在比较时会自动进行类型转换。使用"=="和"!="时,PHP会尝试将两个操作数转换为相同类型再比较;而使用"==="和"!=="时,PHP会比较值和类型,不会进行类型转换。
逻辑运算符用于组合条件语句,在复杂的条件判断中非常有用。
| 运算符 | 名称 | 描述 | 实例 |
|---|---|---|---|
| x and y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 and y > 1) returns true |
| x or y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==6 or y==5) returns true |
| x xor y | 异或 | 如果 x 和 y 有且仅有一个为 true,则返回 true | x=6 y=3 (x==6 xor y==3) returns false |
| x && y | 与 | 如果 x 和 y 都为 true,则返回 true | x=6 y=3 (x < 10 && y > 1) returns true |
| x || y | 或 | 如果 x 和 y 至少有一个为 true,则返回 true | x=6 y=3 (x==5 || y==5) returns false |
| ! x | 非 | 如果 x 不为 true,则返回 true | x=6 y=3 !(x==y) returns true |
<?php
// 逻辑运算符示例
$age = 25;
$hasLicense = true;
// AND 运算符 (&& 或 and)
if($age >= 18 && $hasLicense) {
echo "可以驾驶\n";
} else {
echo "不能驾驶\n";
}
// OR 运算符 (|| 或 or)
$isWeekend = true;
$isHoliday = false;
if($isWeekend || $isHoliday) {
echo "今天是休息日\n";
} else {
echo "今天是工作日\n";
}
// NOT 运算符 (!)
$isRaining = false;
if(!$isRaining) {
echo "天气晴朗,适合外出\n";
}
// XOR 运算符
$a = true;
$b = false;
var_dump($a xor $b); // bool(true) - 只有一个为true
$c = true;
$d = true;
var_dump($c xor $d); // bool(false) - 两个都为true
// 复杂条件示例
$score = 85;
$attendance = 90;
if(($score >= 60 && $attendance >= 80) || $score >= 90) {
echo "通过考试\n";
} else {
echo "未通过考试\n";
}
?>
运算符优先级: && 和 || 的优先级高于 and 和 or。在复杂表达式中,建议使用括号明确指定运算顺序,避免混淆。
数组运算符用于比较和合并数组,在数组操作中非常实用。
| 运算符 | 名称 | 描述 |
|---|---|---|
| x + y | 联合 | x 和 y 的联合(不覆盖重复键) |
| x == y | 相等 | 如果 x 和 y 具有相同的键/值对,则返回 true |
| x === y | 恒等 | 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true |
| x != y | 不相等 | 如果 x 不等于 y,则返回 true |
| x <> y | 不相等 | 如果 x 不等于 y,则返回 true |
| x !== y | 不恒等 | 如果 x 不等于 y,则返回 true |
<?php
// 数组运算符示例
$x = array("a" => "red", "b" => "green");
$y = array("c" => "blue", "d" => "yellow");
// 数组联合
$z = $x + $y; // $x 和 $y 的联合
echo "数组联合结果:\n";
print_r($z);
// 数组相等比较
$arr1 = array("a" => "red", "b" => "green");
$arr2 = array("b" => "green", "a" => "red");
echo "arr1 == arr2: ";
var_dump($arr1 == $arr2); // bool(true) - 键值对相同
echo "arr1 === arr2: ";
var_dump($arr1 === $arr2); // bool(false) - 顺序不同
// 数组不等比较
$arr3 = array("a" => "red", "b" => "blue");
echo "arr1 != arr3: ";
var_dump($arr1 != $arr3); // bool(true)
// 实际应用:数组合并
$fruits1 = ['apple', 'banana'];
$fruits2 = ['orange', 'grape'];
$allFruits = $fruits1 + $fruits2;
echo "所有水果:\n";
print_r($allFruits);
// 注意:数组联合不会覆盖重复键
$array1 = ['a' => 'apple', 'b' => 'banana'];
$array2 = ['b' => 'blueberry', 'c' => 'cherry'];
$result = $array1 + $array2;
echo "数组联合(注意键'b'的值):\n";
print_r($result); // 键'b'的值是'banana'(来自$array1)
?>
PHP运算符有不同的优先级,当表达式中有多个运算符时,优先级高的运算符会先被执行。如果优先级相同,则根据结合性决定运算顺序。
<?php
// 运算符优先级示例
$result1 = 2 + 3 * 4; // 乘法优先级高于加法
echo "2 + 3 * 4 = " . $result1 . "\n"; // 输出 14
$result2 = (2 + 3) * 4; // 使用括号改变优先级
echo "(2 + 3) * 4 = " . $result2 . "\n"; // 输出 20
// 逻辑运算符优先级
$a = false;
$b = true;
$c = true;
$result3 = $a && $b || $c; // && 优先级高于 ||
echo "false && true || true = ";
var_dump($result3); // bool(true)
$result4 = $a && ($b || $c); // 使用括号明确优先级
echo "false && (true || true) = ";
var_dump($result4); // bool(false)
// 赋值运算符优先级较低
$x = 5;
$y = 10;
$z = $x = $y; // 从右向左结合
echo "z = " . $z . "\n"; // 输出 10
?>
最佳实践: 在复杂的表达式中,建议使用括号明确指定运算顺序,即使您了解运算符优先级。这样可以使代码更易读,减少错误。
掌握这些运算符是编写高效PHP代码的基础。在实际编程中,合理使用运算符可以使代码更简洁、更易读。