基本语法

PHP 标记

当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php?>,这告诉 PHP 开始和停止解析二者之间的代码。此种解析方式使得 PHP 可以被嵌入到各种不同的文档中去,而任何起始和结束标记之外的部分都会被 PHP 解析器忽略。

PHP 有一个 echo 标记简写 <?=,它是更完整的 <?php echo 的简写形式。

<?php echo 'if you want to serve PHP code in XHTML or XML documents,
                use these tags'; ?>

You can use the short echo tag to <?= 'print this string' ?>.
    It's equivalent to <?php echo 'print this string' ?>.

<? echo 'this code is within short tags, but will only work '.
            'if short_open_tag is enabled'; ?>

Note: 因为短标记可以被禁用,所以建议使用普通标记 (<?php ?> 和 <?= ?>) 来最大化兼容性。

如果文件内容仅仅包含 PHP 代码,最好在文件末尾删除 PHP 结束标记。这可以避免在 PHP 结束标记之后万一意外加入了空格或者换行符,会导致 PHP 开始输出这些空白,而脚本中此时并无输出的意图。

<?php
echo "Hello world";

// ... 更多代码

echo "Last statement";

// 脚本在此处结束,没有 PHP 结束标记

从 HTML 中分离

指令分隔符

注释

PHP 支持 C,C++ 和 Unix Shell 风格(Perl 风格)的注释。例如:

<?php
    echo 'This is a test'; // 这是单行 c++ 样式注释
    /* 这是一条多行注释
       另一行也是注释 */
    echo 'This is yet another test';
    echo 'One Final Test'; # 这是单行 shell 风格的注释
?>

类型

简介

Boolean 布尔类型

Integer 整型

Float 浮点型

String 字符串

数字字符串

Array 数组

Iterable 可迭代对象

Object 对象

Enum 枚举

Resource 资源类型

NULL

Callback / Callable 类型

类型声明

类型转换的判别

变量

基础

预定义变量

变量范围

可变变量

来自 PHP 之外的变量

常量

语法

预定义常量

魔术常量

表达式

运算符

运算符优先级

算术运算符

赋值运算符

位运算符

比较运算符

错误控制运算符

执行运算符

递增/递减运算符

逻辑运算符

字符串运算符

数组运算符

类型运算符

流程控制

简介

if

else

elseif/else if

流程控制的替代语法

while

do-while

for

foreach

break

continue

switch

match

declare

return

require

include

require_once

include_once

goto

函数

用户自定义函数

函数的参数

返回值

可变函数

内部(内置)函数

匿名函数

箭头函数

箭头函数是 PHP 7.4 的新语法,是一种更简洁的 匿名函数 写法。

匿名函数和箭头函数都是 Closure 类的实现。

箭头函数的基本语法为 fn (argument_list) => expr

箭头函数支持与 匿名函数相同的功能,只是其父作用域的变量总是自动的。

当表达式中使用的变量是在父作用域中定义的,它将被隐式地按值捕获。在下面的例子中,函数 $fn1$fn2 的行为是一样的。

Example #1 箭头函数自动捕捉变量的值

<?php

$y = 1;

$fn1 = fn($x) => $x + $y;
// 相当于通过 value 使用 $y:
$fn2 = function ($x) use ($y) {
    return $x + $y;
};

var_export($fn1(3));
?>

在箭头函数嵌套的情况下同样有效。

Example #2 箭头函数自动捕捉变量的值,即使在嵌套的情况下

<?php

$z = 1;
$fn = fn($x) => fn($y) => $x * $y + $z;
// 输出 51
var_export($fn(5)(10));
?>

和匿名函数一样,箭头函数语法同样允许标准的函数声明,包括参数和返回类型、缺省值、变量,以及通过引用传递和返回。以下都是箭头函数的有效例子。

Example #3 合法的箭头函数例子

<?php

fn(array $x) => $x;
static fn(): int => $x;
fn($x = 42) => $x;
fn(&$x) => $x;
fn&($x) => $x;
fn($x, ...$rest) => $rest;

?>

箭头函数会自动绑定上下文变量,这相当于对箭头函数内部使用的每一个变量 $x 执行了一个 use($x)。这意味着不可能修改外部作用域的任何值,若要实现对值的修改,可以使用 匿名函数 来替代。

Example #4 来自外部范围的值不能在箭头函数内修改

<?php

$x = 1;
$fn = fn() => $x++; // 不会影响 x 的值
$fn();
var_export($x);  // 输出 1

?>

类与对象

简介

基本概念

属性

类常量

类的自动加载

构造函数和析构函数

访问控制(可见性)

对象继承

范围解析操作符 (::)

静态(static)关键字

抽象类

对象接口

Trait

匿名类

重载

遍历对象

魔术方法

Final 关键字

对象复制

对象比较

后期静态绑定

对象和引用

对象序列化

协变与逆变

OOP 变更日志

命名空间

命名空间概述

定义命名空间

定义子命名空间

在同一个文件中定义多个命名空间

使用命名空间:基础

命名空间和动态语言特征

namespace 关键字和 NAMESPACE 常量

使用命名空间:别名/导入

全局空间

使用命名空间:后备全局函数/常量

名称解析规则

FAQ:命名空间必知必会

枚举

枚举概览

枚举基础

回退(Backed)枚举

枚举方法

枚举静态方法

枚举常量

Trait

常量表达式的枚举值

和对象的差异

枚举值清单

序列化

范例

错误

基础概要

PHP 7 错误处理

异常

扩展(extend) 异常处理类

纤程

生成器

生成器总览

生成器语法

生成器与 Iterator 对象的比较

注解

注解概览

注解语法

使用反射 API 读取注解

声明注解类

引用的解释

引用是什么

引用做什么

引用不是什么

引用传递

引用返回

取消引用

引用定位

预定义变量

超全局变量 — 在全部作用域中始终可用的内置变量

$GLOBALS — 引用全局作用域中可用的全部变量

$_SERVER — 服务器和执行环境信息

$_GET — HTTP GET 变量

$_POST — HTTP POST 变量

$_FILES — HTTP 文件上传变量

$_REQUEST — HTTP Request 变量

$_SESSION — Session 变量

$_ENV — 环境变量

$php_errormsg — 前一个错误信息

$http_response_header — HTTP 响应头

$argc — 传递给脚本的参数数目

$argv — 传递给脚本的参数数组

预定义异常

Exception

ErrorException

Error

ArgumentCountError

ArithmeticError

AssertionError

DivisionByZeroError

CompileError

ParseError

TypeError

ValueError

UnhandledMatchError

FiberError

预定义接口

Traversable — Traversable (遍历)接口

Iterator — Iterator(迭代器)接口

IteratorAggregate — IteratorAggregate(聚合式迭代器)接口

Throwable

ArrayAccess — ArrayAccess(数组式访问)接口

Serializable — Serializable 接口

Closure — Closure 类

Generator — 生成器类

Fiber — 纤程(Fiber)类

WeakReference — WeakReference 类

WeakMap — WeakMap 类

Stringable — Stringable 接口

UnitEnum — UnitEnum 接口

BackedEnum — BackedEnum 接口

上下文(Context)选项和参数

套接字上下文选项 — 套接字上下文选项列表

HTTP context 选项 — HTTP context 的选项列表

FTP 上下文选项 — FTP 上下文选项列表

SSL 上下文选项 — SSL 上下文选项清单

CURL 上下文选项 — CURL 上下文选项列表

Phar 上下文(context)选项 — Phar 上下文(context)选项列表

Context 参数 — Context 参数列表

Zip 上下文选项 — Zip 上下文选项列表

支持的协议和封装协议

file:// — 访问本地文件系统

http:// — 访问 HTTP(s) 网址

ftp:// — 访问 FTP(s) URLs

php:// — 访问各个输入/输出流(I/O streams)

zlib:// — 压缩流

data:// — 数据(RFC 2397)

glob:// — 查找匹配的文件路径模式

phar:// — PHP 归档

ssh2:// — Secure Shell 2

rar:// — RAR

ogg:// — 音频流

expect:// — 处理交互式的流