基础
Hello World
标签内
运行 PHP
php script.php # 执行文件 php -r 'echo "hi\n";' # 内联执行 php -S localhost:8000 # 内置开发服务器
注释
// 单行注释 # 也是单行注释 /* 多行 注释 */
变量与类型
变量
$name = "PHP"; // 字符串 $version = 8.3; // 浮点数 $count = 42; // 整数 $active = true; // 布尔 $items = null; // null
类型检查
gettype($x)以字符串返回类型
is_string($x)是否为字符串
is_int($x)是否为整数
is_array($x)是否为数组
is_null($x)是否为 null
isset($x)是否已设置且不为 null
empty($x)是否为空(假值)
类型转换
$n = (int) "42"; // 42 $s = (string) 3.14; // "3.14" $b = (bool) ""; // false $a = (array) $obj; // 对象转数组
常量
define("MAX_SIZE", 100); const API_VERSION = "v2"; echo MAX_SIZE; // 100
字符串
字符串基础
$name = "World"; echo "Hello, $name!"; // 变量插值 echo 'Hello, $name!'; // 字面字符串(无插值) echo "Value: {$arr['key']}"; // 复杂表达式
字符串函数
strlen($s)字符串字节长度
mb_strlen($s)字符串字符长度(多字节安全)
strtolower($s)转小写
strtoupper($s)转大写
trim($s)去除首尾空白
str_replace(a, b, $s)$s 中的 a 替换为 b
substr($s, 0, 5)从位置 0 截取长度 5 的子串
strpos($s, 'find')查找子串位置(未找到返回 false)
explode(',', $s)将字符串分割为数组
implode(',', $a)将数组合并为字符串
Heredoc 与 Nowdoc
$html = <<Hello, $name

HTML; $raw = <<<'TEXT' No $interpolation here TEXT;
数组
索引数组与关联数组
$nums = [1, 2, 3]; // 索引数组 $user = ["name" => "Alice", "age" => 30]; // 关联数组 $nums[] = 4; // 追加 echo $user["name"]; // 访问
数组函数
count($a)元素数量
array_push($a, $v)追加到末尾
array_pop($a)移除并返回最后一个元素
array_merge($a, $b)合并两个数组
in_array($v, $a)检查值是否存在
array_key_exists($k, $a)检查键是否存在
array_map($fn, $a)对每个元素应用函数
array_filter($a, $fn)按回调过滤元素
sort($a)原地排序(重新索引)
array_keys($a)返回所有键
遍历
foreach ($users as $user) { echo $user; } foreach ($map as $key => $value) { echo "$key: $value\n"; }
函数
基础函数
function add(int $a, int $b): int { return $a + $b; } echo add(3, 5);
默认参数与命名参数
function greet(string $name, string $greeting = "Hello"): string { return "$greeting, $name!"; } greet("Alice"); greet(greeting: "Hi", name: "Bob"); // 命名参数(PHP 8+)
箭头函数
$double = fn(int $x): int => $x * 2; $nums = array_map(fn($n) => $n * 10, [1, 2, 3]);
闭包
$factor = 3; $multiply = function(int $x) use ($factor): int { return $x * $factor; }; echo $multiply(5); // 15
类与对象
类定义
class User { public function __construct( private string $name, private int $age = 0, ) {} public function greet(): string { return "Hi, {$this->name}"; } }
继承与接口
interface Printable { public function toString(): string; } class Admin extends User implements Printable { public function toString(): string { return "Admin"; } }
访问控制
public任何地方均可访问
protected本类及子类可访问
private仅本类内部可访问
readonly只能赋值一次(PHP 8.1+)
static属于类本身,非实例
abstract必须由子类实现
Trait
trait Timestamped { public function createdAt(): string { return date('Y-m-d H:i:s'); } } class Post { use Timestamped; }
错误处理
try / catch / finally
try { $result = riskyOperation(); } catch (InvalidArgumentException $e) { echo "Bad input: " . $e->getMessage(); } catch (Exception $e) { echo "Error: " . $e->getMessage(); } finally { cleanup(); }
自定义异常
class ApiException extends RuntimeException { public function __construct(string $message, private int $statusCode = 500) { parent::__construct($message, $statusCode); } }
Null 安全(PHP 8+)
$len = $user?->address?->zip; // 空安全运算符 $name = $input ?? "default"; // null 合并 $data ??= []; // null 合并赋值
文件 I/O
读写文件
$content = file_get_contents("data.txt"); file_put_contents("out.txt", $content); $lines = file("data.txt", FILE_IGNORE_NEW_LINES);
文件句柄
$f = fopen("log.txt", "a"); fwrite($f, "entry\n"); fclose($f);
文件函数
file_exists($path)检查文件是否存在
is_dir($path)检查路径是否为目录
mkdir($path, 0755, true)递归创建目录
unlink($path)删除文件
glob('*.txt')按模式查找文件
realpath($path)解析为完整绝对路径
数据库
PDO 连接
$pdo = new PDO( "mysql:host=localhost;dbname=app", "user", "password", [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION] );
预处理语句
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id"); $stmt->execute([":id" => 42]); $user = $stmt->fetch(PDO::FETCH_ASSOC);
插入与更新
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); $stmt->execute(["Alice", "[email protected]"]); $id = $pdo->lastInsertId();
PDO 获取模式
fetch()获取单行
fetchAll()获取所有行
FETCH_ASSOC以关联数组返回
FETCH_OBJ以匿名对象返回
FETCH_CLASS以指定类实例返回
常用函数
JSON
$json = json_encode(["name" => "Alice", "age" => 30]); $data = json_decode($json, true); // true = 关联数组 $data = json_decode($json); // 对象
日期与时间
echo date("Y-m-d H:i:s"); // 2026-03-26 12:00:00 $ts = strtotime("+1 week"); $dt = new DateTime("2026-01-01"); echo $dt->format("D, M j"); // Thu, Jan 1
数学与随机数
abs($n)绝对值
round($n, 2)四舍五入到 2 位小数
ceil($n) / floor($n)向上 / 向下取整
min($a, $b) / max($a, $b)最小值 / 最大值
random_int(1, 100)密码学安全的随机整数
number_format($n, 2)格式化数字(带千位分隔符)
正则表达式
preg_match('/^[a-z]+$/i', $str, $matches); preg_match_all('/\d+/', $str, $all); $result = preg_replace('/\s+/', ' ', $str);