PHP 语法
下面对 PHP 的语法要点做一次系统化、分模块的详解,涵盖从基本结构到高级用法,帮助你全面掌握这门语言的语法特点。
1. PHP 标签与文件结构
<?php
// PHP 代码写在这里
?>
- 标准标签:
<?php … ?>
,推荐使用。 - 简写标签:
<?= … ?>
等同于<?php echo … ?>
,默认开启;<? … ?>
(short_open_tag)可能被禁用,不推荐使用。 - HTML 与 PHP 混合:可在同一文件内使用多次 PHP 标签,以实现动态页面渲染。
2. 注释
// 单行注释
# 另一种单行注释
/*
多行注释
*/
- 注释不会被解释器执行,用于说明代码逻辑或屏蔽调试。
3. 变量与数据类型
$var = 123; // 整数(int)
$pi = 3.14; // 浮点数(float)
$str = "Hello"; // 字符串(string)
$flag = true; // 布尔(bool)
$arr = [1, 2, 3]; // 数组(array)
$obj = new stdClass(); // 对象(object)
$nil = null; // 空值(NULL)
- 变量以
$
开头,大小写敏感; - 动态类型:变量类型在运行时确定,可随时重新赋值为其它类型;
- 常量:使用
define('NAME', value)
或const NAME = value;
定义,名称通常全大写。
4. 字符串与字符串处理
// 单引号:按字面输出,不解析变量或转义(除 \\ 和 \')
$s1 = 'It\'s PHP';
// 双引号:解析变量及常见转义字符
$name = "Alice";
$s2 = "Hello, $name\n";
// HereDoc / NowDoc
$text = <<<EOD
HereDoc 支持解析变量:$name
EOD;
$text2 = <<<'EOD'
NowDoc 不解析变量:$name
EOD;
- 常用函数:
strlen()
、strpos()
、substr()
、str_replace()
、explode()
、implode()
等。
5. 数组
5.1 索引数组
$fruits = ['apple', 'banana', 'cherry'];
echo $fruits[1]; // banana
5.2 关联数组
$user = [
'name' => 'Bob',
'age' => 30,
];
echo $user['name']; // Bob
5.3 常用操作
count($arr); // 元素个数
array_push($arr, 4); // 尾部添加
array_pop($arr); // 尾部弹出
array_keys($user); // 获取所有键
array_values($user); // 获取所有值
foreach ($arr as $key => $val) { … }
6. 运算符
类别 | 运算符 | 说明 |
---|---|---|
算术 | + - * / % ** | 加、减、乘、除、取余、幂运算(PHP 5.6+) |
赋值 | = += -= *= /= .= | 基本赋值,包含字符串拼接赋值 .= |
比较 | == === != <> !== < > <= >= <=> | 相等/全等/不等/全不等/比较三元运算符 |
逻辑 | && and || or ! xor | 逻辑与、或、非、异或 |
位运算 | & | ^ ~ << >> | 按位与、或、异或、取反、左移、右移 |
三元与空合并 | ?: , ?: , ?? | 三元运算、简化三元、空合并运算 (?? PHP7+) |
7. 流程控制
7.1 条件判断
if ($a > $b) {
…
} elseif ($a === $b) {
…
} else {
…
}
// Switch
switch ($status) {
case 0:
…
break;
case 1:
…
break;
default:
…
}
7.2 循环
// while
while ($i < 10) {
$i++;
}
// do…while
do {
$i--;
} while ($i > 0);
// for
for ($i = 0; $i < 5; $i++) {
echo $i;
}
// foreach
foreach ($arr as $val) {
echo $val;
}
- 可使用
break
、continue
控制循环流程,也支持带层级参数的break 2;
。
8. 函数
// 定义
function add(int $a, int $b): int {
return $a + $b;
}
// 可变参数(PHP 5.6+)
function sum(...$nums) {
return array_sum($nums);
}
// 匿名函数与闭包
$greet = function($name) {
return "Hello, $name";
};
// 引用传参
function inc(&$n) {
$n++;
}
- 类型声明:参数和返回值可声明类型(标量类型、类名、
array
、callable
等),在严格模式下强制检查; - 可变函数:
$func = 'add'; echo $func(1,2);
; - 高阶函数:可将函数作为参数或返回值。
9. 面向对象(OOP)
class Person {
// 属性
public string $name;
protected int $age;
private static int $count = 0;
// 构造
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
self::$count++;
}
// 方法
public function greet(): string {
return "Hi, I'm {$this->name}";
}
// 静态方法
public static function getCount(): int {
return self::$count;
}
}
// 继承与接口
interface Talker {
public function talk(): string;
}
class Employee extends Person implements Talker {
public function talk(): string {
return "Work mode";
}
}
// 命名空间
namespace App\Models;
- 可见性:
public
、protected
、private
; - 静态成员:使用
static
关键字,通过self::
或ClassName::
访问; - Traits:代码复用片段,使用
use TraitName;
; - 魔术方法:
__construct
、__destruct
、__get
、__set
、__call
、__toString
等。
10. 命名空间与自动加载
namespace Vendor\Package;
class User { … }
// 引入
use Vendor\Package\User;
// PSR-4 自动加载:按照命名空间映射文件路径
- Composer 根据
composer.json
中的"autoload"
配置自动生成加载器。
11. 错误与异常
// 错误级别控制
error_reporting(E_ALL);
ini_set('display_errors', '1');
// 自定义错误处理
set_error_handler(function($errno, $errstr) {
// 处理或记录
});
// 异常处理
try {
throw new \Exception("出错");
} catch (\Throwable $e) {
echo $e->getMessage();
} finally {
// 必执行
}
- PHP 7+ 中,
Throwable
接口包括Error
与Exception
。
12. 常用超全局变量
变量名 | 功能 |
---|---|
$_GET | HTTP GET 参数 |
$_POST | HTTP POST 参数 |
$_REQUEST | 合并 GET、POST、COOKIE |
$_SESSION | 会话数据 |
$_COOKIE | 客户端 Cookie |
$_SERVER | 服务器与执行环境信息 |
$_FILES | 上传文件信息 |
$_ENV | 环境变量 |
13. 脚本执行与 CLI
php script.php # 执行脚本
php -a # 交互模式
php -r 'echo 1;'
- 可在脚本顶部添加
#!/usr/bin/env php
并赋予可执行权限,实现类 Shell 脚本效果。
以上内容覆盖了 PHP 语法的核心与常见高级特性。结合官方手册和实际项目练习,能帮助你快速上手并编写健壮、可维护的 PHP 代码。祝编码顺利!