php5到php7官方升级日志说明:
PHP 5.3
添加了命名空间的支持.
添加了静态晚绑定支持.
添加了跳标签支持.
添加了原生的闭包(Lambda/匿名函数)支持.
新增了两个魔术方法, __callStatic 和 __invoke.
添加了 Nowdoc 语法支持, 类似于 Heredoc 语法, 但是包含单引号.
使用 Heredoc 来初始化静态变量和类属性/常量变为可能.
可使用双引号声明 Heredoc, 补充了 Nowdoc 语法.
可在类外部使用 const 关键词声明 常量.
三元运算操作符有了简写形式: ?:.
HTTP 流包裹器将从 200 到 399 全部的状态码都视为成功。
动态访问静态方法变为可能.
异常可以被内嵌.
新增了循环引用的垃圾回收器并且默认是开启的.
mail() 现在支持邮件发送日志. (注意: 仅支持通过该函数发送的邮件.)
PHP 5.4
新增支持 traits 。
新增短数组语法,比如 $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 。
改进解析错误信息和不兼容参数的警告。
SESSION 扩展现在能追踪文件的 上传进度 。
内置用于开发的 CLI 模式的 web server 。
PHP5.5
新增 Generators
新增 finally 关键字
foreach 现在支持 list()
empty() 支持任意表达式
array and string literal dereferencing ¶
新的密码哈希 API
改进 GD
PHP5.6
使用表达式定义常量
使用 ... 运算符定义变长参数函数
使用 ... 运算符进行参数展开
使用 ** 进行幂运算
use function 以及 use const
phpdbg
默认字符编码
php://input 是可重用的了
大文件上传(现在可以支持大于 2GB 的文件上传)
GMP 支持运算符重载
使用 hash_equals() 比较字符串避免时序攻击
__debugInfo()
gost-crypto 散列算法
SSL/TLS 提升
pgsql 异步支持
PHP7.0
标量类型声明
返回值类型声明
null合并运算符
太空船操作符(组合比较符)
通过 define() 定义常量数组
匿名类
Unicode codepoint 转译语法
Closure::call()
为unserialize()提供过滤
IntlChar
预期
Group use declarations
生成器可以返回表达式
Generator delegation
整数除法函数 intp()
会话选项
preg_replace_callback_array()
CSPRNG Functions
可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象
其他特性
PHP7.1
可为空(Nullable)类型
Void 函数
Symmetric array destructuring
类常量可见性
iterable 伪类
多异常捕获处理
list()现在支持键名
支持为负的字符串偏移量
ext/openssl 支持 AEAD
通过 Closure::fromCallable() 将callables转为闭包
异步信号处理
HTTP/2 server push support in ext/curl
php7和php5区别对比 不同之处和运行效率比较
1、php标量类型和返回类型声明
</>code
- #主要分为两种模式,强制性模式和严格模式
- declare(strict_types=1)
- #1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。
2、NULL合并运算符
</>code
- $site = isset($_GET['site']) ? $_GET['site'] : 'wo';
- #简写成
- $site = $_GET['site'] ??'wo';
3、组合预算符
</>code
- // 整型比较
- print( 1 <=> 1);print(PHP_EOL);
- print( 1 <=> 2);print(PHP_EOL);
- print( 2 <=> 1);print(PHP_EOL);
- print(PHP_EOL); // PHP_EOL 为换行符
- //结果:
- 0
- -1
4、常量数组
</>code
- // 使用 define 函数来定义数组
- define('sites', [
- 'Google',
- 'Jser',
- 'Taobao'
- ]);
- print(sites[1]);
5、匿名类
</>code
- interface Logger {
- public function log(string $msg);
- }
- class Application {
- private $logger;
- public function getLogger(): Logger {
- return $this->logger;
- }
- public function setLogger(Logger $logger) {
- $this->logger = $logger;
- }
- }
- $app = new Application;
- // 使用 new class 创建匿名类
- $app->setLogger(new class implements Logger {
- public function log(string $msg) {
- print($msg);
- }
- });
- $app->getLogger()->log("我的第一条日志");
6、Closure::call()方法增加,意思向类绑定个匿名函数
</>code
- <?php
- class A {
- private $x = 1;
- }
- // PHP 7 之前版本定义闭包函数代码
- $getXCB = function() {
- return $this->x;
- };
- // 闭包函数绑定到类 A 上
- $getX = $getXCB->bindTo(new A, 'A');
- echo $getX();
- print(PHP_EOL);
- // PHP 7+ 代码
- $getX = function() {
- return $this->x;
- };
- echo $getX->call(new A);
- ?>
7、CSPRNG(伪随机数产生器)。
PHP 7 通过引入几个 CSPRNG 函数提供一种简单的机制来生成密码学上强壮的随机数。
random_bytes() - 加密生存被保护的伪随机字符串。
random_int() - 加密生存被保护的伪随机整数。
8、异常
PHP 7 异常用于向下兼容及增强旧的assert()函数。
9、use 语句改变
</>code
- #可以导入同一个namespace下的类简写
- use some\namespace\{ClassA, ClassB, ClassC as C};
10、Session 选项
</>code
- 1.session_start()可以定义数组
- <?php
- session_start([
- 'cache_limiter' => 'private',
- 'read_and_close' => true,
- ]);
- ?>
- 2.引入了一个新的php.ini设置(session.lazy_write),默认情况下设置为 true,意味着session数据只在发生变化时才写入。
11、PHP 7 移除的扩展
</>code
- ereg
- mssql
- mysql
- sybase_ct
为什么 PHP7 比 PHP5 性能提升了?
1、变量存储字节减小,减少内存占用,提升变量操作速度
2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率
3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率
传说php7 运行效率极高,是真的吗?我来亲自试试,代码如下:
</>code
- <?php
- $stratTime = microtime(true);
- $startMemory = memory_get_usage();
- $a = 1;
- for($i = 1; $i <= 100000; $i++){
- $a++;
- }
- echo $a;
- $endTime = microtime(true);
- $runtime = ($endTime - $stratTime) * 1000; //将时间转换为毫秒
- $endMemory = memory_get_usage();
- $usedMemory = ($endMemory - $startMemory) / 1024;
- echo "运行时间: {$runtime} 毫秒<br />";
- echo "耗费内存: {$usedMemory} K";
以上代码是记录php运行100000次循环需要的时间和消耗的内存。
php7运行情况
</>code
- 100001运行时间: 3 - 7 毫秒耗费内存: 0.109375 K
php5.5运行情况
</>code
- 100001运行时间: 18 - 30 毫秒耗费内存: 0.671875 K
看来真的是快了不少啊!!! 时间节省了6倍,内存节省了6倍。非常不错的数据!
不过站长们升级php7还是需要谨慎,因为很多插件还没有更新! 比如最新的memcache扩展还没有发布等等.....
我们可以提前学习php7的变化,待其成熟果断使用!!
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛