三、运算符
3.1 算术运算符
<?php
$a = 10;
$b = 3;
echo $a + $b; // 13(加法)
echo $a - $b; // 7(减法)
echo $a * $b; // 30(乘法)
echo $a / $b; // 3.333...(除法)
echo $a % $b; // 1(取模/取余)
echo $a ** $b; // 1000(幂运算,PHP 5.6+)
// 取模运算注意事项
echo -10 % 3; // -1(结果与被除数符号相同)
echo 10 % -3; // 1
3.2 赋值运算符
<?php
$x = 10;
$x += 5; // $x = $x + 5 = 15
$x -= 3; // $x = $x - 3 = 12
$x *= 2; // $x = $x * 2 = 24
$x /= 4; // $x = $x / 4 = 6
$x %= 2; // $x = $x % 2 = 0
$x .= "abc"; // $x = $x . "abc" = "0abc"
// 引用赋值
$a = 10;
$b = &$a; // $b是$a的引用
$a = 20;
echo $b; // 20
3.3 比较运算符
<?php
$a = 5;
$b = "5";
$c = 10;
var_dump($a == $b); // true(值相等)
var_dump($a === $b); // false(值相等但类型不同)
var_dump($a != $b); // false
var_dump($a !== $b); // true
var_dump($a <> $b); // false(不等于,同!=)
var_dump($a < $c); // true
var_dump($a > $c); // false
var_dump($a <= $c); // true
var_dump($a >= $c); // false
// 太空船运算符(PHP 7+)
echo 1 <=> 1; // 0(相等)
echo 1 <=> 2; // -1(左边小于右边)
echo 2 <=> 1; // 1(左边大于右边)
// null合并运算符(PHP 7+)
$username = $_GET['user'] ?? '匿名'; // 如果$_GET['user']存在且不为null,使用它,否则使用'匿名'
// 组合比较
$result = $a <=> $b;
3.4 逻辑运算符
<?php
$a = true;
$b = false;
var_dump($a and $b); // false(逻辑与)
var_dump($a && $b); // false(逻辑与,优先级更高)
var_dump($a or $b); // true(逻辑或)
var_dump($a || $b); // true(逻辑或,优先级更高)
var_dump(!$a); // false(逻辑非)
var_dump($a xor $b); // true(逻辑异或,一真一假为真)
// 短路求值
function test() {
echo "执行了";
return true;
}
$result = false && test(); // test()不会执行(短路)
3.5 字符串运算符
<?php
$a = "Hello";
$b = " World";
// 连接运算符
$c = $a . $b; // "Hello World"
// 连接赋值运算符
$a .= $b; // $a = "Hello World"
// 字符串插值(双引号内)
$name = "张三";
echo "你好,$name"; // 输出:你好,张三
// 复杂语法
echo "你好,{$name}先生"; // 输出:你好,张三先生
3.6 数组运算符
<?php
$a = ["a" => "苹果", "b" => "香蕉"];
$b = ["c" => "橙子", "d" => "葡萄"];
$c = ["b" => "菠萝", "a" => "苹果"];
// +:联合,左边优先
$result = $a + $b; // ["a"=>"苹果", "b"=>"香蕉", "c"=>"橙子", "d"=>"葡萄"]
// ==:相等(键值对相同)
var_dump($a == $c); // true
// ===:全等(键值对相同且顺序相同)
var_dump($a === $c); // false(顺序不同)
// !=:不等
// <>:不等
// !==:不全等
3.7 其他运算符
<?php
// 三元运算符
$age = 18;
$status = $age >= 18 ? "成年" : "未成年";
// 三元运算符简写(PHP 5.3+)
$username = $_GET['user'] ?: "匿名"; // 等同于 $username = $_GET['user'] ? $_GET['user'] : "匿名"
// NULL合并运算符(PHP 7+)
$username = $_GET['user'] ?? "匿名"; // 如果$_GET['user']存在且不为null,使用它,否则使用"匿名"
// 错误控制运算符(@)
$result = @file_get_contents("notexist.txt"); // 抑制错误信息
// 执行运算符(反引号)
$output = `ls -la`;
echo $output;
// instanceof:类型检测
class MyClass {}
$obj = new MyClass();
var_dump($obj instanceof MyClass); // true
四、流程控制
4.1 条件语句
<?php
// if语句
$score = 85;
if ($score >= 60) {
echo "及格了!";
}
// if-else语句
if ($score >= 60) {
echo "及格";
} else {
echo "不及格";
}
// if-elseif-else语句
if ($score >= 90) {
echo "优秀";
} elseif ($score >= 80) {
echo "良好";
} elseif ($score >= 70) {
echo "中等";
} elseif ($score >= 60) {
echo "及格";
} else {
echo "不及格";
}
// 替代语法(适用于模板)
if ($score >= 60):
echo "及格了!";
endif;
// switch语句
$day = date('N'); // 1(星期一)到7(星期日)
switch ($day) {
case 1:
echo "星期一";
break;
case 2:
echo "星期二";
break;
case 3:
echo "星期三";
break;
case 4:
echo "星期四";
break;
case 5:
echo "星期五";
break;
default:
echo "周末";
}
// switch替代语法
switch ($day):
case 1:
echo "星期一";
break;
default:
echo "周末";
endswitch;
// match表达式(PHP 8.0+)
$result = match($day) {
1 => "星期一",
2 => "星期二",
3 => "星期三",
4 => "星期四",
5 => "星期五",
default => "周末",
};
echo $result;
4.2 循环语句
<?php
// while循环
$i = 1;
while ($i <= 5) {
echo "第{$i}次<br>";
$i++;
}
// do-while循环(至少执行一次)
$j = 1;
do {
echo "第{$j}次<br>";
$j++;
} while ($j <= 5);
// for循环
for ($i = 1; $i <= 5; $i++) {
echo "第{$i}次<br>";
}
// 嵌套循环:乘法表
echo "<table border='1'>";
for ($i = 1; $i <= 9; $i++) {
echo "<tr>";
for ($j = 1; $j <= $i; $j++) {
echo "<td>{$i}×{$j}=" . ($i * $j) . "</td>";
}
echo "</tr>";
}
echo "</table>";
// foreach循环(遍历数组)
$fruits = ["苹果", "香蕉", "橙子"];
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
// 遍历关联数组
$user = ["name" => "张三", "age" => 25, "city" => "北京"];
foreach ($user as $key => $value) {
echo "{$key}: {$value}<br>";
}
// 通过引用修改数组元素
$numbers = [1, 2, 3];
foreach ($numbers as &$num) {
$num *= 2;
}
// $numbers = [2, 4, 6]
// break和continue
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
break; // 跳出循环
}
if ($i % 2 == 0) {
continue; // 跳过本次迭代
}
echo $i . "<br>";
}
五、函数
5.1 函数定义与调用
<?php
// 基本函数定义
function sayHello() {
echo "Hello, World!";
}
sayHello(); // 调用
// 带参数的函数
function greet($name) {
echo "Hello, {$name}!";
}
greet("张三");
// 带返回值的函数
function add($a, $b) {
return $a + $b;
}
$result = add(10, 20);
// 默认参数
function makeCoffee($type = "拿铁") {
echo "制作一杯{$type}";
}
makeCoffee(); // 制作一杯拿铁
makeCoffee("美式"); // 制作一杯美式
// 类型声明(PHP 7+)
function sum(int $a, int $b): int {
return $a + $b;
}
// 严格类型模式
declare(strict_types=1);
function multiply(int $a, int $b): int {
return $a * $b;
}
// multiply(2.5, 3); // 错误:类型不匹配
// 可变参数(PHP 5.6+)
function sumAll(...$numbers) {
return array_sum($numbers);
}
echo sumAll(1, 2, 3, 4, 5); // 15
// 参数解包(PHP 5.6+)
$numbers = [1, 2, 3, 4, 5];
echo sumAll(...$numbers); // 15
// 返回值类型声明
function getValue(): ?string {
return null; // 可以返回null或string
}
// void返回类型(PHP 7.1+)
function logMessage(string $msg): void {
echo $msg;
// 不能有return语句
}
// 函数内静态变量
function counter() {
static $count = 0;
$count++;
return $count;
}
echo counter(); // 1
echo counter(); // 2
echo counter(); // 3
5.2 可变函数
<?php
function foo() {
echo "foo函数";
}
function bar($arg) {
echo "bar函数:{$arg}";
}
$func = "foo";
$func(); // 调用foo()
$func = "bar";
$func("test"); // 调用bar("test")
// 对象方法调用
class MyClass {
public function method() {
echo "方法被调用";
}
}
$obj = new MyClass();
$methodName = "method";
$obj->$methodName();
5.3 匿名函数(闭包)
<?php
// 匿名函数赋值给变量
$greet = function($name) {
echo "Hello, {$name}!";
};
$greet("张三");
// 作为参数传递
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(function($n) {
return $n * $n;
}, $numbers);
// 使用use关键字引入外部变量
$factor = 2;
$multiply = function($n) use ($factor) {
return $n * $factor;
};
echo $multiply(5); // 10
// 返回匿名函数
function multiplier($factor) {
return function($n) use ($factor) {
return $n * $factor;
};
}
$double = multiplier(2);
echo $double(5); // 10
// 箭头函数(PHP 7.4+)
$numbers = [1, 2, 3, 4, 5];
$squared = array_map(fn($n) => $n * $n, $numbers);
$factor = 2;
$multiply = fn($n) => $n * $factor; // 自动捕获外部变量
5.4 递归函数
<?php
// 阶乘
function factorial($n) {
if ($n <= 1) {
return 1;
}
return $n * factorial($n - 1);
}
echo factorial(5); // 120
// 斐波那契数列
function fibonacci($n) {
if ($n <= 1) {
return $n;
}
return fibonacci($n - 1) + fibonacci($n - 2);
}
// 遍历目录
function listFiles($dir) {
$files = scandir($dir);
foreach ($files as $file) {
if ($file == '.' || $file == '..') {
continue;
}
$path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($path)) {
echo "目录: {$path}\n";
listFiles($path);
} else {
echo "文件: {$path}\n";
}
}
}
listFiles(__DIR__);