PHP 运算符详解

运算符是PHP编程语言中用于执行各种操作的符号。它们允许我们对变量和值进行算术运算、比较、赋值等操作。掌握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中,点号(.)运算符用于字符串连接,而不是加号(+)。使用加号连接字符串会导致类型转换,可能产生意想不到的结果。

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!
?>

PHP 递增/递减运算符

递增和递减运算符用于对变量的值进行加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
?>

重要提示: 预递增/递减与后递增/递减的区别在于返回值的时间点。预操作先执行运算再返回值,后操作先返回值再执行运算。在复杂表达式中使用时要特别注意这一点。

PHP 比较运算符

比较运算符用于比较两个值,返回布尔值(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会比较值和类型,不会进行类型转换。

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。在复杂表达式中,建议使用括号明确指定运算顺序,避免混淆。

PHP 数组运算符

数组运算符用于比较和合并数组,在数组操作中非常实用。

运算符 名称 描述
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
?>

最佳实践: 在复杂的表达式中,建议使用括号明确指定运算顺序,即使您了解运算符优先级。这样可以使代码更易读,减少错误。

本章总结

  • 算术运算符:用于执行基本的数学运算
  • 赋值运算符:用于给变量赋值,包括复合赋值运算符
  • 递增/递减运算符:用于对变量值进行加1或减1操作
  • 比较运算符:用于比较两个值,返回布尔结果
  • 逻辑运算符:用于组合条件语句
  • 数组运算符:用于比较和合并数组
  • 运算符优先级:决定表达式中运算的执行顺序

掌握这些运算符是编写高效PHP代码的基础。在实际编程中,合理使用运算符可以使代码更简洁、更易读。