PHP 5.3 新特性
添加了命名空间的支持.
添加了静态晚绑定支持.
添加了跳标签支持.
添加了原生的闭包(Lambda/匿名函数)支持.
新增了两个魔术方法, __callStatic 和 __invoke.
添加了 Nowdoc 语法支持, 类似于 Heredoc 语法, 但是包含单引号.
<?php echo <<<'EOT' My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should not print a capital 'A': \x41 EOT; // 输出: // My name is "$name". I am printing some $foo->foo. // Now, I am printing some {$foo->bar[1]}. // This should not print a capital 'A': \x41
使用 Heredoc 来初始化静态变量和类属性/常量变为可能.
可使用双引号声明 Heredoc, 补充了 Nowdoc 语法.
可在类外部使用 const 关键词声明 常量.
三元运算操作符有了简写形式:
?:.
HTTP 流包裹器将从 200 到 399 全部的状态码都视为成功。
动态访问静态方法变为可能.
异常可以被内嵌.
try { try { throw new MyException('foo!'); } catch (MyException $e) { // rethrow it throw $e; } } catch (Exception $e) { var_dump($e->getMessage()); }
新增了循环引用的垃圾回收器并且默认是开启的.
mail() 现在支持邮件发送日志. (注意: 仅支持通过该函数发送的邮件.)
PHP 5.4 新特性
新增支持 traits 。
<?php trait ezcReflectionReturnInfo { function getReturnType() { /*1*/ } function getReturnDescription() { /*2*/ } } class ezcReflectionMethod extends ReflectionMethod { use ezcReflectionReturnInfo; /* ... */ }
新增短数组语法,比如
$a = [1, 2, 3, 4];
或$a = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
。新增支持对函数返回数组的成员访问解析,例如 foo()[0] 。
现在 闭包 支持 $this 。
现在不管是否设置 short_open_tag php.ini 选项,
<?=
将总是可用。新增在实例化时访问类成员,例如:
(new Foo)->bar()
。现在支持
Class::{expr}()
语法。新增二进制直接量,例如:0b001001101。
$bin = 0b1101; echo $bin; // 13
改进解析错误信息和不兼容参数的警告。
SESSION 扩展现在能追踪文件的 上传进度 。
<?php $key = ini_get("session.upload_progress.prefix") . ini_get("session.upload-progress.name"); var_dump($_SESSION[$key]);
内置用于开发的 CLI 模式的 web server 。
PHP5.5 新特性
新增 Generators
新增 finally 关键字
foreach 现在支持 list()
$array = [ [1, 2], [3, 4], ]; foreach ($array as list($a, $b)) { echo "A: $a; B: $b\n"; } // 输出: // A: 1; B: 2 // A: 3; B: 4
empty() 支持任意表达式
array and string literal dereferencing
新的密码哈希 API
改进 GD
PHP5.6 新特性
使用表达式定义常量
使用
...
运算符定义变长参数函数<?php function f($req, $opt = null, ...$params) { // $params 是一个包含了剩余参数的数组 printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3);
使用
...
运算符进行参数展开使用
**
进行幂运算use function 以及 use const
<?php namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; // 输出: 42 f(); // 输出: Name\Space\f }
默认字符编码
对于一些字符编码相关的函数,例如 htmlentities(), html_entity_decode() 以及 htmlspecialchars() 使用 default_charset 作为默认字符集。
php://input 是可重用的了
大文件上传(现在可以支持大于 2GB 的文件上传)
GMP 支持运算符重载
使用 hash_equals() 比较字符串避免时序攻击
gost-crypto 散列算法
pgsql 异步支持
PHP7.0 新特性
标量类型声明
null合并运算符
太空船操作符
<=>
(组合比较符)通过 define() 定义常量数组
Unicode codepoint 转译语法
Closure::call()
<?php class A {private $x = 1;} // PHP 7 之前版本的代码 $getXCB = function() {return $this->x;}; $getX = $getXCB->bindTo(new A, 'A'); // 中间层闭包 echo $getX(); // PHP 7+ 及更高版本的代码 $getX = function() {return $this->x;}; echo $getX->call(new A);
为unserialize()提供过滤
Group use declarations
<?php // PHP 7 之前的代码 use some\namespace\ClassA; use some\namespace\ClassB; use some\namespace\ClassC as C; use function some\namespace\fn_a; use function some\namespace\fn_b; use function some\namespace\fn_c; use const some\namespace\ConstA; use const some\namespace\ConstB; use const some\namespace\ConstC; // PHP 7+ 及更高版本的代码 use some\namespace\{ClassA, ClassB, ClassC as C}; use function some\namespace\{fn_a, fn_b, fn_c}; use const some\namespace\{ConstA, ConstB, ConstC};
生成器可以返回表达式
整数除法函数 intdiv()
会话选项
CSPRNG Functions
可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象
其他特性
PHP7.1 新特性
可为空(Nullable)类型
Void 函数
Symmetric array destructuring
类常量可见性
iterable 伪类
多异常捕获处理
list()现在支持键名
支持为负的字符串偏移量
ext/openssl 支持 AEAD
通过
Closure::fromCallable()
将callables转为闭包<?php class Test{ public function exposeFunction(){ return Closure::fromCallable([$this, 'privateFunction']); } private function privateFunction($param){ var_dump($param); } } $privFunc = (new Test)->exposeFunction(); $privFunc('some value'); // 输出 some value
异步信号处理
HTTP/2 server push support in ext/curl