PHP知识点大全(二)

简介: 教程来源 http://unbgv.cn/category/shengxiaoxingge.html 本文系统讲解PHP核心语法:涵盖算术、赋值、比较、逻辑等运算符;if/switch/match条件控制与while/for/foreach循环;函数定义、类型声明、可变参数、匿名函数(含箭头函数)、递归等完整函数特性。内容全面,示例丰富,适合作为PHP学习速查手册。

三、运算符

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__);

来源:
http://unbgv.cn/category/shengxiaopeidui.html

相关文章
|
13天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
11454 124
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
2天前
|
人工智能 JSON 监控
Claude Code 源码泄露:一份价值亿元的 AI 工程公开课
我以为顶级 AI 产品的护城河是模型。读完这 51.2 万行泄露的源码,我发现自己错了。
3461 8
|
1天前
|
人工智能 数据可视化 安全
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
本文详解如何用阿里云Lighthouse一键部署OpenClaw,结合飞书CLI等工具,让AI真正“动手”——自动群发、生成科研日报、整理知识库。核心理念:未来软件应为AI而生,CLI即AI的“手脚”,实现高效、安全、可控的智能自动化。
1327 2
王炸组合!阿里云 OpenClaw X 飞书 CLI,开启 Agent 基建狂潮!(附带免费使用6个月服务器)
|
12天前
|
人工智能 IDE API
2026年国内 Codex 安装教程和使用教程:GPT-5.4 完整指南
Codex已进化为AI编程智能体,不仅能补全代码,更能理解项目、自动重构、执行任务。本文详解国内安装、GPT-5.4接入、cc-switch中转配置及实战开发流程,助你从零掌握“描述需求→AI实现”的新一代工程范式。(239字)
7465 139
|
2天前
|
云安全 供应链 安全
Axios投毒事件:阿里云安全复盘分析与关键防护建议
阿里云云安全中心和云防火墙第一时间响应
1144 0
|
3天前
|
人工智能 自然语言处理 数据挖掘
零基础30分钟搞定 Claude Code,这一步90%的人直接跳过了
本文直击Claude Code使用痛点,提供零基础30分钟上手指南:强调必须配置“工作上下文”(about-me.md+anti-ai-style.md)、采用Cowork/Code模式、建立标准文件结构、用提问式提示词驱动AI理解→规划→执行。附可复制模板与真实项目启动法,助你将Claude从聊天工具升级为高效执行系统。
|
2天前
|
人工智能 定位技术
Claude Code源码泄露:8大隐藏功能曝光
2026年3月,Anthropic因配置失误致Claude Code超51万行源码泄露,意外促成“被动开源”。代码中藏有8大未发布功能,揭示其向“超级智能体”演进的完整蓝图,引发AI编程领域震动。(239字)
2150 9
|
11天前
|
人工智能 并行计算 Linux
本地私有化AI助手搭建指南:Ollama+Qwen3.5-27B+OpenClaw阿里云/本地部署流程
本文提供的全流程方案,从Ollama安装、Qwen3.5-27B部署,到OpenClaw全平台安装与模型对接,再到RTX 4090专属优化,覆盖了搭建过程的每一个关键环节,所有代码命令可直接复制执行。使用过程中,建议优先使用本地模型保障隐私,按需切换云端模型补充功能,同时注重显卡温度与显存占用监控,确保系统稳定运行。
2551 9