PHP 语言

精选 PHP 常用指令与核心速查备忘单,涵盖数据类型、字符串与数组操作、运算符、控制流、函数、Trait、Enum 及面向对象编程。

#🚀 入门指引

#hello.php

<?php // 以 PHP 开启标签开头

echo "Hello World\n";
print("Hello qr.warpnav.com");

?>

PHP 命令行运行指令

$ php hello.php

#变量声明 (Variables)

$boolean1 = true;
$boolean2 = True;

$int = 12;
$float = 3.1415926;
unset($float);  // 删除变量

$str1 = "How are you?";
$str2 = 'Fine, thanks';

参考:PHP 类型

#字符串 (Strings)

$url = "qr.warpnav.com";
echo "I'm learning PHP at $url";

// 拼接字符串(使用点号运算符 .)
echo "I'm learning PHP at " . $url;

$hello = "Hello, ";
$hello .= "World!";
echo $hello;   # => Hello, World!

参考:字符串部分

#数组 (Arrays)

$num = [1, 3, 5, 7, 9];
$num[5] = 11;
unset($num[2]);    // 删除数组元素
print_r($num);     # => 1 3 7 9 11
echo count($num);  # => 5

参考:数组部分

#运算符 (Operators)

$x = 1;
$y = 2;

$sum = $x + $y;
echo $sum;   # => 3

参考:运算符部分

#文件包含 (Include)

vars.php

<?php // 以 PHP 开启标签开头
$fruit = 'apple';
echo "I was imported";
return 'Anything you like.';
?>

test.php

<?php
include 'vars.php';
echo $fruit . "\n";   # => apple

/* 与 include 类似,如果无法导入将抛出致命错误 */
require 'vars.php';

// 函数调用形式亦可
include('vars.php');
require('vars.php');

// 通过 HTTP 引入远程文件
include 'http://x.com/file.php';

// 包含文件并获取返回值
$result = include 'vars.php';
echo $result;  # => Anything you like.
?>

#函数 (Functions)

function add($num1, $num2 = 1) {
    return $num1 + $num2;
}
echo add(10);    # => 11
echo add(10, 5); # => 15

参考:函数部分

#代码注释

# 这是单行 Shell 风格注释

// 这是单行 C++ 风格注释

/* 这是多行注释
   支持跨越多行 */

#常量 (Constants)

const MY_CONST = "hello";

echo MY_CONST;   # => hello

# => MY_CONST is: hello
echo 'MY_CONST is: ' . MY_CONST;

#类 (Classes)

class Student {
    public function __construct($name) {
        $this->name = $name;
    }
}
$alex = new Student("Alex");

参考:类与面向对象

#PHP 数据类型 (PHP Types)

#布尔型 (Boolean)

$boolean1 = true;
$boolean2 = TRUE;
$boolean3 = false;
$boolean4 = FALSE;

$boolean5 = (boolean) 1;   # => true
$boolean6 = (boolean) 0;   # => false

布尔值关键字在 PHP 中不区分大小写。

#整数 (Integer)

$int1 = 28;    # => 28
$int2 = -32;   # => -32
$int3 = 012;   # => 10 (八进制)
$int4 = 0x0F;  # => 15 (十六进制)
$int5 = 0b101; # => 5  (二进制)

# => 20001 (十进制下划线数值分隔符, PHP 7.4.0+)
$int6 = 2_000_100_000;

参见: Integers

参考官方手册:整数型手册

#字符串 (Strings)

echo 'this is a simple string';

参考:字符串部分

#数组 (Arrays)

$arr = array("hello", "world", "!");

参考:数组部分

#浮点数 (Float / Double)

$float1 = 1.234;
$float2 = 1.2e7;
$float3 = 7E-10;

$float4 = 1_234.567;  // PHP 7.4.0+ 支持
var_dump($float4);    // float(1234.567)

$float5 = 1 + "10.5";   # => 11.5
$float6 = 1 + "-1.3e3"; # => -1299

#空值 (Null)

$a = null;
$b = 'Hello php!';
echo $a ?? 'a is unset'; # => a is unset
echo $b ?? 'b is unset'; # => Hello php

$a = array();
$a == null    # => true
$a === null   # => false
is_null($a)   # => false

#可迭代对象 (Iterables)

function bar(): iterable {
    return [1, 2, 3];
}
function gen(): iterable {
    yield 1;
    yield 2;
    yield 3;
}
foreach (bar() as $value) {
    echo $value;   # => 123
}

#PHP 字符串处理 (PHP Strings)

#字符串声明

# => '$String'
$sgl_quotes = '$String';

# => 'This is a $String.'
$dbl_quotes = "This is a $sgl_quotes.";

# => a 	 tab character.
$escaped   = "a \t tab character.";

# => a slash and a t: \t
$unescaped = 'a slash and a t: \t';

#多行文本 (Multi-line)

$str = "foo";

// 不解析变量的多行文本 (Nowdoc)
$nowdoc = <<<'END'
Multi line string
$str
END;

// 会解析变量的多行文本 (Heredoc)
$heredoc = <<<END
Multi line
$str
END;

#常用字符串函数

$s = "Hello Phper";
echo strlen($s);       # => 11

echo substr($s, 0, 3); # => Hel
echo substr($s, 1);    # => ello Phper
echo substr($s, -4, 3);# => hpe

echo strtoupper($s);   # => HELLO PHPER
echo strtolower($s);   # => hello phper

echo strpos($s, "l");      # => 2
var_dump(strpos($s, "L")); # => false

参见: String Functions

参考官方文档:字符串函数列表

#PHP 数组 (PHP Arrays)

#声明定义

$a1 = ["hello", "world", "!"]
$a2 = array("hello", "world", "!");
$a3 = explode(",", "apple,pear,peach");

混合整型与字符串 Key

$array = array(
    "foo" => "bar",
    "bar" => "foo",
    100   => -100,
    -100  => 100,
);
var_dump($array);

短数组语法 (Short Array Syntax)

$array = [
    "foo" => "bar",
    "bar" => "foo",
];

#多维数组 (Multi array)

$multiArray = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];

print_r($multiArray[0][0]) # => 1
print_r($multiArray[0][1]) # => 2
print_r($multiArray[0][2]) # => 3

#复合数据类型数组

$array = array(
    "foo" => "bar",
    42    => 24,
    "multi" => array(
         "dim" => array(
             "a" => "foo"
         )
    )
);

# => string(3) "bar"
var_dump($array["foo"]);

# => int(24)
var_dump($array[42]);

# =>  string(3) "foo"
var_dump($array["multi"]["dim"]["a"]);

#数组元素增删与操作

$arr = array(5 => 1, 12 => 2);
$arr[] = 56;      // 追加元素
$arr["x"] = 42;   // 使用指定的 key 添加
sort($arr);       // 排序
unset($arr[5]);   // 删除元素
unset($arr);      // 删除整个数组

参见: Array Functions

参考官方文档:数组函数列表

#数字索引遍历

$array = array('a', 'b', 'c');
$count = count($array);

for ($i = 0; $i < $count; $i++) {
    echo "i:{$i}, v:{$array[$i]}\n";
}

#数组值遍历 (foreach)

$colors = array('red', 'blue', 'green');

foreach ($colors as $color) {
    echo "Do you like $color?\n";
}

#键值遍历 (foreach key=>value)

$arr = ["foo" => "bar", "bar" => "foo"];

foreach ( $arr as $key => $value )
{
  	echo "key: " . $key . "\n";
    echo "val: {$arr[$key]}\n";
}

#数组解包拼接 (Spread Operator)

$a = [1, 2];
$b = [3, 4];

// PHP 7.4+ 解包展开数组
# => [1, 2, 3, 4]
$result = [...$a, ...$b];

#解包作为函数入参

$array = [1, 2];

function foo(int $a, int $b) {
	echo $a; # => 1
  	echo $b; # => 2
}
foo(...$array);

#可变长参数 (...Splat Operator)

function foo($first, ...$other) {
	var_dump($first); # => a
  	var_dump($other); # => ['b', 'c']
}
foo('a', 'b', 'c' /*, ...*/ );
// 或指定强类型约束
function foo($first, string ...$other){}

#PHP 运算符 (PHP Operators)

#算术运算符

符号 描述说明
+ 加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取模(求余)
** 幂次方运算

#赋值运算符

符号 描述说明
a += b 等价于 a = a + b
a -= b 等价于 a = a – b
a *= b 等价于 a = a * b
a /= b 等价于 a = a / b
a %= b 等价于 a = a % b

#比较运算符

符号 描述说明
== 等于
=== 全等(值与类型均相同)
!= 不等于
<> 不等于
!== 不全等
< 小于
> 大于
<= 小于或等于
>= 大于或等于
<=> 太空船运算符 (小于/等于/大于)

#逻辑运算符

符号 描述说明
and 逻辑与
or 逻辑或
xor 异或
! 逻辑非
&& 逻辑与
|| 逻辑或

#算术与自增运算法示例

// 基础算术运算
$sum        = 1 + 1; // 2
$difference = 2 - 1; // 1
$product    = 2 * 2; // 4
$quotient   = 2 / 1; // 2

// 复合简写与自增
$num = 0;
$num += 1;       // $num 加 1
echo $num++;     // 输出 1 (先求值再自增)
echo ++$num;     // 输出 3 (先自增再求值)
$num /= $float;  // 除以 $float 并赋值给 $num

#位运算符

符号 描述说明
& 按位与 (And)
| 按位或 (Or)
^ 按位异或 (Xor)
~ 按位取反 (Not)
<< 左移位 (Shift left)
>> 右移位 (Shift right)

#PHP 条件控制 (PHP Conditionals)

#If elseif else 条件分支

$a = 10;
$b = 20;

if ($a > $b) {
    echo "a is bigger than b";
} elseif ($a == $b) {
    echo "a is equal to b";
} else {
    echo "a is smaller than b";
}

#Switch 条件匹配

$x = 0;
switch ($x) {
    case '0':
        print "it's zero";
        break;
    case 'two':
    case 'three':
        // 执行对应动作
        break;
    default:
        // 默认动作
}

#三元运算符与 Null 合并运算符

# => Does
print (false ? 'Not' : 'Does');

$x = false;
# => Does
print($x ?: 'Does');

$a = null;
$b = 'Does print';
# => a is unset
echo $a ?? 'a is unset';
# => print
echo $b ?? 'b is unset';

#Match 表达式 (PHP 8.0+)

$statusCode = 500;
$message = match($statusCode) {
  200, 300 => null,
  400 => 'not found',
  500 => 'server error',
  default => 'known status code',
};
echo $message; # => server error

参见: Match

参考官方手册:Match 结构

#Match 表达式求值

$age = 23;

$result = match (true) {
    $age >= 65 => 'senior',
    $age >= 25 => 'adult',
    $age >= 18 => 'young adult',
    default => 'kid',
};

echo $result; # => young adult

#PHP 循环结构 (PHP Loops)

#while 循环

$i = 1;
# => 12345


while ($i <= 5) {
    echo $i++;
}

#do while 循环

$i = 1;
# => 12345
do {
    echo $i++;
} while ($i <= 5);

#for 循环

# => 12345
for ($i = 1; $i <= 5; $i++) {
    echo $i;
}

#break 终结循环

# => 123
for ($i = 1; $i <= 5; $i++) {
    if ($i === 4) {
        break;
    }
    echo $i;
}

#continue 跳过本次循环

# => 1235
for ($i = 1; $i <= 5; $i++) {
    if ($i === 4) {
        continue;
    }
    echo $i;
}

#foreach 遍历

$a = ['foo' => 1, 'bar' => 2];
# => 12
foreach ($a as $k) {
    echo $k;
}

参考:数组遍历部分

#PHP 函数 (PHP Functions)

#函数返回值

function square($x)
{
    return $x * $x;
}

echo square(4);  # => 16

#返回类型声明 (PHP 7.0+)

// 基础返回类型声明
function sum($a, $b): float {/*...*/}
function get_item(): string {/*...*/}

class C {}
// 返回对象声明
function getC(): C { return new C; }

#可空返回类型 (Nullable Return Types)

// PHP 7.1+ 可空返回类型 ?type
function nullOrString(int $v) : ?string
{
    return $v % 2 ? "odd" : null;
}
echo nullOrString(3);       # => odd
var_dump(nullOrString(4));  # => NULL

参见: Nullable types

参考官方手册:可空类型说明

#Void 无返回值函数

// PHP 7.1+ 支持 void 声明
function voidFunction(): void
{
	echo 'Hello';
	return;
}

voidFunction();  # => Hello

#可变函数 (Variable Functions)

function bar($arg = '')
{
    echo "In bar(); arg: '$arg'.\n";
}

$func = 'bar';
$func('test'); # => In bar(); arg: test

#匿名函数 (Closure)

$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World'); # => Hello World
$greet('PHP');   # => Hello PHP

#递归处理函数 (递归处理 Functions)

function recursion($x)
{
    if ($x < 5) {
        echo "$x";
        recursion($x + 1);
    }
}
recursion(1);  # => 1234

#默认参数

function coffee($type = "cappuccino")
{
    return "Making a cup of $type.\n";
}
# => Making a cup of cappuccino.
echo coffee();
# => Making a cup of .
echo coffee(null);
# => Making a cup of espresso.
echo coffee("espresso");

#箭头函数 (Arrow Functions)

$y = 1;

$fn1 = fn($x) => $x + $y;

// 等价于使用 $y 值的匿名函数:
$fn2 = function ($x) use ($y) {
    return $x + $y;
};
echo $fn1(5);   # => 6
echo $fn2(5);   # => 6

#PHP 类与面向对象 (PHP Classes)

#构造函数

class Student {
    public function __construct($name) {
        $this->name = $name;
    }
  	public function print() {
        echo "Name: " . $this->name;
    }
}
$alex = new Student("Alex");
$alex->print();    # => Name: Alex

#类继承 (Inheritance)

class ExtendClass extends SimpleClass
{
    // 重写父类方法
    function displayVar()
    {
        echo "Extending class\n";
        parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();

#类变量与可见性 (Classes variables)

class MyClass
{
    const MY_CONST       = 'value';
    static $staticVar    = 'static';

    // 公有可见性
    public static $var1  = 'pubs';

    // 仅当前类内部可见
    private static $var2 = 'pris';

    // 当前类及子类可见
    protected static $var3 = 'pros';

    // 当前类及子类可见
    protected $var6      = 'pro';

    // 仅当前类内部可见
    private $var7        = 'pri';
}

静态访问方式

echo MyClass::MY_CONST;   # => value
echo MyClass::$staticVar; # => static

#魔术方法 (Magic Methods)

class MyClass
{
    // 对象作为字符串对待时触发
    public function __toString()
    {
        return $property;
    }
    // 析构函数(与 __construct 对应)
    public function __destruct()
    {
        print "Destroying";
    }
}

#接口 (Interface)

interface Foo
{
    public function doSomething();
}
interface Bar
{
    public function doSomethingElse();
}
class Cls implements Foo, Bar
{
    public function doSomething() {}
    public function doSomethingElse() {}
}

#PHP 特性性组件 (PHP Trait)

#Trait 声明与应用场景

// 声明 Trait 以实现在多个类之间跨类复用代码
// 用于具有共同特征或使用场景的类

<?php
trait Logger {
    public function log($message) {
    	$date = new DateTime();
        echo "| ".  $date->format('Y-m-d H:i:s') . " | " . $message;
    }
}

// 使用场景 :
// 在 Class 内部使用 "use <trait 名称>" 引入

class User {
    use Logger; 

    public function createUser() {
        // 用户创建逻辑
        $this->log("User created.");
    }
}

class Product {
    use Logger;

    public function createProduct() {
        // 产品创建逻辑
        $this->log("Product created.");
    }
}

$user = new User();
$user->createUser(); // 输出示例: | 2025-06-18 14:06:09 | User created.

$product = new Product();
$product->createProduct(); // 输出示例: | 2025-06-18 14:06:09 | Product created.

#PHP 枚举 (PHP Enums, PHP 8.1+)

#Enum 声明与应用场景

<?php
// enum 是一种允许定义一组命名常量的数据类型,
// 代表一组固定的相关值

enum Status {
    case Pending;
    case Approved;
    case Rejected;
}

// 使用场景

function getStatusMessage(Status $status): string {
    return match($status) {
        Status::Pending => "Waiting for approval.",
        Status::Approved => "Your request has been approved.",
        Status::Rejected => "Your request has been rejected.",
    };
}

$currentStatus = Status::Approved;
echo getStatusMessage($currentStatus); // 输出 : Your request has been approved.

#PHP 日期与时间处理 (PHP Date & Time Handling)

#当前日期与时间

// PHP 中的 DateTime 处理日期与时间

<?php
$now = new DateTime();
echo $now->format('Y-m-d H:i:s.u'); 

// 输出示例: 2024-04-27 14:35:22.123456

#创建特定日期/时间对象

<?php
// 创建日期对象
$d = new DateTime('2024-04-27');
echo $d->format('Y-m-d'); 

// 输出 : 2024-04-27

// 创建时间对象
$t = new DateTime('15:30:45');
echo $t->format('H:i:s'); 

// 输出 : 15:30:45

// 创建日期时间对象
$dt = new DateTime('2024-04-27 15:30:45');
echo $dt->format('Y-m-d H:i:s'); 

// 输出 : 2024-04-27 15:30:45

#日期格式转换

<?php
// 将字符串转换为 DateTime 对象
$date_str = "2024-04-27 14:00";
$dt_obj = new DateTime($date_str);
echo $dt_obj->format('Y-m-d H:i:s'); 

// 输出 : 2024-04-27 14:00:0027

// 将 DateTime 对象格式化为字符串
$formatted_str = $dt_obj->format('d/m/Y H:i');
echo $formatted_str;
 
// 输出 : 27/04/2024 14:00

#时间戳与 Unix 时间

<?php
// 获取当前 Unix 时间戳
$timestamp = time();
echo $timestamp; 

// 输出示例: 1750253583

// 将时间戳转换回 DateTime
$dt_from_timestamp = (new DateTime())->setTimestamp($timestamp);
echo $dt_from_timestamp->format('Y-m-d H:i:s');

// 输出示例: 2025-06-18 13:33:03

#日期时间差与计算

<?php
$date1 = new DateTime('2024-04-27');
$date2 = new DateTime('2024-05-01');

$interval = $date1->diff($date2);
echo $interval->days; 

// 输出 : 4

// 使用 DateInterval 进行日期运算
$new_date = clone $date1;
$new_date->add(new DateInterval('P10D'));
echo $new_date->format('Y-m-d'); 

// 输出 : 2024-05-07

#杂项与高级语法 (Miscellaneous)

#基础异常处理

try {
    // 执行业务逻辑
} catch (Exception $e) {
    // 捕获处理异常
} finally {
    echo "Always print!";
}

#PHP 8.0+ 异常语法

$nullableValue = null;

try {
	$value = $nullableValue ?? throw new InvalidArgumentException();
} catch (InvalidArgumentException) { // 捕获变量为可选
    // 处理异常
    echo "print me!";
}

#自定义异常类

class MyException extends Exception {
    // 自定义方法逻辑
}

使用示例

try {
    $condition = true;
    if ($condition) {
        throw new MyException('bala');
    }
} catch (MyException $e) {
    // 处理自定义异常
}

#空安全运算符 (Nullsafe Operator, PHP 8.0+)

// PHP 8.0.0 起支持快捷写法:
$result = $repo?->getUser(5)?->name;

// 等价于如下繁琐代码:
if (is_null($repo)) {
    $result = null;
} else {
    $user = $repository->getUser(5);
    if (is_null($user)) {
        $result = null;
    } else {
        $result = $user->name;
    }
}

参见: Nullsafe Operator

参考官方 RFC:Nullsafe 运算符说明

#正则表达式 (Regular expressions)

$str = "Visit qr.warpnav.com";
echo preg_match("/ch/i", $str); # => 1

参考:PHP 中的正则表达式

#fopen() 文件打开模式

模式 描述说明
r 只读模式
r+ 读写模式,指针指向文件头
w 只写模式,清空文件内容
w+ 读写模式,清空文件内容
a 追加写入模式
a+ 读写追加模式

#超全局变量 (Super Global Variables)

变量名称 描述说明
$_SERVER 包含请求头、路径以及脚本位置等服务信息
$_GET 包含通过 URL 查询字符串参数发送的数据
$_POST 包含通过 HTTP POST 方法发送的数据
$_FILES 包含关于上传文件的所有相关信息
$_COOKIE 包含 Cookie 数据
$_SESSION 包含 Session 会话变量数据
$_REQUEST 默认包含 $_GET$_POST$_COOKIE 的集合数据
$_ENV 包含环境变量数据
$GLOBALS 引用当前脚本中立即可用的所有全局变量

超全局变量是内置变量,在所有作用域中始终有效。

#运行时定义常量 (Runtime defined Constants)

define("CURRENT_DATE", date('Y-m-d'));

// 输出常量值
echo CURRENT_DATE;   # => 2021-01-05

# => CURRENT_DATE is: 2021-01-05
echo 'CURRENT_DATE is: ' . CURRENT_DATE;