精选 PHP 常用指令与核心速查备忘单,涵盖数据类型、字符串与数组操作、运算符、控制流、函数、Trait、Enum 及面向对象编程。
<?php // 以 PHP 开启标签开头
echo "Hello World\n";
print("Hello qr.warpnav.com");
?>
PHP 命令行运行指令
$ php hello.php
$boolean1 = true;
$boolean2 = True;
$int = 12;
$float = 3.1415926;
unset($float); // 删除变量
$str1 = "How are you?";
$str2 = 'Fine, thanks';
参考:PHP 类型
$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!
参考:字符串部分
$num = [1, 3, 5, 7, 9];
$num[5] = 11;
unset($num[2]); // 删除数组元素
print_r($num); # => 1 3 7 9 11
echo count($num); # => 5
参考:数组部分
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.
?>
function add($num1, $num2 = 1) {
return $num1 + $num2;
}
echo add(10); # => 11
echo add(10, 5); # => 15
参考:函数部分
# 这是单行 Shell 风格注释
// 这是单行 C++ 风格注释
/* 这是多行注释
支持跨越多行 */
const MY_CONST = "hello";
echo MY_CONST; # => hello
# => MY_CONST is: hello
echo 'MY_CONST is: ' . MY_CONST;
$boolean1 = true;
$boolean2 = TRUE;
$boolean3 = false;
$boolean4 = FALSE;
$boolean5 = (boolean) 1; # => true
$boolean6 = (boolean) 0; # => false
布尔值关键字在 PHP 中不区分大小写。
$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
$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
function bar(): iterable {
return [1, 2, 3];
}
function gen(): iterable {
yield 1;
yield 2;
yield 3;
}
foreach (bar() as $value) {
echo $value; # => 123
}
# => '$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';
$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
参考官方文档:字符串函数列表
$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",
];
$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";
}
$colors = array('red', 'blue', 'green');
foreach ($colors as $color) {
echo "Do you like $color?\n";
}
$arr = ["foo" => "bar", "bar" => "foo"];
foreach ( $arr as $key => $value )
{
echo "key: " . $key . "\n";
echo "val: {$arr[$key]}\n";
}
$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);
function foo($first, ...$other) {
var_dump($first); # => a
var_dump($other); # => ['b', 'c']
}
foo('a', 'b', 'c' /*, ...*/ );
// 或指定强类型约束
function foo($first, string ...$other){}
| 符号 | 描述说明 |
|---|---|
+ |
加法运算 |
- |
减法运算 |
* |
乘法运算 |
/ |
除法运算 |
% |
取模(求余) |
** |
幂次方运算 |
| 符号 | 描述说明 |
|---|---|
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) |
$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";
}
$x = 0;
switch ($x) {
case '0':
print "it's zero";
break;
case 'two':
case 'three':
// 执行对应动作
break;
default:
// 默认动作
}
# => 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';
$age = 23;
$result = match (true) {
$age >= 65 => 'senior',
$age >= 25 => 'adult',
$age >= 18 => 'young adult',
default => 'kid',
};
echo $result; # => young adult
$i = 1;
# => 12345
while ($i <= 5) {
echo $i++;
}
$i = 1;
# => 12345
do {
echo $i++;
} while ($i <= 5);
# => 12345
for ($i = 1; $i <= 5; $i++) {
echo $i;
}
# => 123
for ($i = 1; $i <= 5; $i++) {
if ($i === 4) {
break;
}
echo $i;
}
# => 1235
for ($i = 1; $i <= 5; $i++) {
if ($i === 4) {
continue;
}
echo $i;
}
function square($x)
{
return $x * $x;
}
echo square(4); # => 16
// 基础返回类型声明
function sum($a, $b): float {/*...*/}
function get_item(): string {/*...*/}
class C {}
// 返回对象声明
function getC(): C { return new C; }
// 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
参考官方手册:可空类型说明
// PHP 7.1+ 支持 void 声明
function voidFunction(): void
{
echo 'Hello';
return;
}
voidFunction(); # => Hello
function bar($arg = '')
{
echo "In bar(); arg: '$arg'.\n";
}
$func = 'bar';
$func('test'); # => In bar(); arg: test
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World'); # => Hello World
$greet('PHP'); # => Hello PHP
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");
$y = 1;
$fn1 = fn($x) => $x + $y;
// 等价于使用 $y 值的匿名函数:
$fn2 = function ($x) use ($y) {
return $x + $y;
};
echo $fn1(5); # => 6
echo $fn2(5); # => 6
class Student {
public function __construct($name) {
$this->name = $name;
}
public function print() {
echo "Name: " . $this->name;
}
}
$alex = new Student("Alex");
$alex->print(); # => Name: Alex
class ExtendClass extends SimpleClass
{
// 重写父类方法
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
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
class MyClass
{
// 对象作为字符串对待时触发
public function __toString()
{
return $property;
}
// 析构函数(与 __construct 对应)
public function __destruct()
{
print "Destroying";
}
}
interface Foo
{
public function doSomething();
}
interface Bar
{
public function doSomethingElse();
}
class Cls implements Foo, Bar
{
public function doSomething() {}
public function doSomethingElse() {}
}
// 声明 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
// 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 中的 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
<?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
try {
// 执行业务逻辑
} catch (Exception $e) {
// 捕获处理异常
} finally {
echo "Always print!";
}
$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) {
// 处理自定义异常
}
// 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;
}
}
参考官方 RFC:Nullsafe 运算符说明
$str = "Visit qr.warpnav.com";
echo preg_match("/ch/i", $str); # => 1
参考:PHP 中的正则表达式
| 模式 | 描述说明 |
|---|---|
r |
只读模式 |
r+ |
读写模式,指针指向文件头 |
w |
只写模式,清空文件内容 |
w+ |
读写模式,清空文件内容 |
a |
追加写入模式 |
a+ |
读写追加模式 |
| 变量名称 | 描述说明 |
|---|---|
$_SERVER |
包含请求头、路径以及脚本位置等服务信息 |
$_GET |
包含通过 URL 查询字符串参数发送的数据 |
$_POST |
包含通过 HTTP POST 方法发送的数据 |
$_FILES |
包含关于上传文件的所有相关信息 |
$_COOKIE |
包含 Cookie 数据 |
$_SESSION |
包含 Session 会话变量数据 |
$_REQUEST |
默认包含 $_GET、$_POST 和 $_COOKIE 的集合数据 |
$_ENV |
包含环境变量数据 |
$GLOBALS |
引用当前脚本中立即可用的所有全局变量 |
超全局变量是内置变量,在所有作用域中始终有效。
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;