摘要:本文来源于PHP官方文档,这里并不会展开,送给有心的小伙伴做研究清单。PHP 5.3https://secure.php.net/manual...添加了命名空间的支持.添加了静态晚绑定支持.添加了跳标签支持.添加了原生的闭包(Lambda/匿名函数)支 ...
本文来源于PHP官方文档,这里并不会展开,送给有心的小伙伴做研究清单。
PHP 5.3
https://secure.php.net/manual...
-
添加了命名空间的支持.
-
添加了静态晚绑定支持.
-
添加了跳标签支持.
-
添加了原生的闭包(Lambda/匿名函数)支持.
-
新增了两个魔术方法, __callStatic 和 __invoke.
-
添加了 Nowdoc 语法支持, 类似于 Heredoc 语法, 但是包含单引号.
-
使用 Heredoc 来初始化静态变量和类属性/常量变为可能.
-
可使用双引号声明 Heredoc, 补充了 Nowdoc 语法.
-
可在类外部使用 const 关键词声明 常量.
-
三元运算操作符有了简写形式: ?:.
-
HTTP 流包裹器将从 200 到 399 全部的状态码都视为成功。
-
动态访问静态方法变为可能.
-
异常可以被内嵌.
-
新增了循环引用的垃圾回收器并且默认是开启的.
-
mail() 现在支持邮件发送日志. (注意: 仅支持通过该函数发送的邮件.)
PHP 5.4
https://secure.php.net/manual...
-
新增支持 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
https://secure.php.net/manual...
-
新增 Generators
-
新增 finally 关键字
-
foreach 现在支持 list()
-
empty() 支持任意表达式
-
array and string literal dereferencing ¶
-
新的密码哈希 API
-
改进 GD
PHP5.6
https://secure.php.net/manual...
-
使用表达式定义常量
-
使用 ... 运算符定义变长参数函数
-
使用 ... 运算符进行参数展开
-
使用 ** 进行幂运算
-
use function 以及 use const
-
phpdbg
-
默认字符编码
-
php://input 是可重用的了
-
大文件上传(现在可以支持大于 2GB 的文件上传)
-
GMP 支持运算符重载
-
使用 hash_equals() 比较字符串避免时序攻击
-
__debugInfo()
-
gost-crypto 散列算法
-
SSL/TLS 提升
-
pgsql 异步支持
PHP7.0
https://secure.php.net/manual...
-
标量类型声明
-
返回值类型声明
-
null合并运算符
-
太空船操作符(组合比较符)
-
通过 define() 定义常量数组
-
匿名类
-
Unicode codepoint 转译语法
-
Closure::call()
-
为unserialize()提供过滤
-
IntlChar
-
预期
-
Group use declarations
-
生成器可以返回表达式
-
Generator delegation
-
整数除法函数 intp()
-
会话选项
-
preg_replace_callback_array()
-
CSPRNG Functions
-
可以使用 list() 函数来展开实现了 ArrayAccess 接口的对象
-
其他特性
PHP7.1
https://secure.php.net/manual...
-
可为空(Nullable)类型
-
Void 函数
-
Symmetric array destructuring
-
类常量可见性
-
iterable 伪类
-
多异常捕获处理
-
list()现在支持键名
-
支持为负的字符串偏移量
-
ext/openssl 支持 AEAD
-
通过 Closure::fromCallable() 将callables转为闭包
-
异步信号处理
-
HTTP/2 server push support in ext/curl
以上就是从PHP5.3到PHP7.1发生了哪些变化的详细内容,更多请关注php中文网其它相关文章!
原文链接:https://blog.csdn.net/resilient/article/details/82416321
PHP7来一发
PHP7正式发布到现在已经一年半了,刚出道就号称比旧版本快了几倍,各种开源框架或系统运行在PHP7上速度效率提高了几倍,反正不管是媒体还是开发者都在煽风点火,不,应该是赞不绝口。
我就静静看你们装逼,不说话。
一般手机系统升级我是跑最后的,因为不愿意踩坑,毕竟iOS和Android这种系统都会出现bug,何况世界上被人黑的最多的语言。
今日时机已到,看看PHP7有没有传说的那么王炸。
安装两个PHP版本
http://php.net/ 已经有最新PHP7的最新版本,大家可自行下载。
为了测试PHP5和PHP7(PHP6已被放弃,心疼1s)的性能,我在不同的目录安装了两个php版本。
安装过程就略过了,无论源码安装还是包管理工具安装,记得自己的路径即可。
PHP7:
# /usr/local/php7/bin/php -v
PHP 7.1.5 (cli) (built: May 13 2017 23:36:41) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
PHP5:
# /usr/bin/php -v
PHP 5.6.30 (cli) (built: Jan 19 2017 22:31:39)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
环境说明:为了保证最佳的测试效果,本次测试在直接在生产环境进行,更逼近真实情况。
操作系统:CentOS 7.2 64位
基础配置:1核 1GB 1Mbps
主机品牌:腾讯云
PHP7和PHP5的对决
1. 纯php脚本测试
vim test.php
$arr = array();
for ($i = 0; $i < 500000; $i++) {
$arr[$i] = $i;
}
$tmp = array();
foreach ($arr as $i) {
if ($i % 2 == 0) {
$is_exists = array_key_exists($i, $arr);
if ($is_exists) {
array_push($tmp, $i);
}
}
}
PHP5版本测试:
time /usr/bin/php test.php
real 0m0.301s
user 0m0.239s
sys 0m0.050s
--------------------------
time /usr/bin/php test.php
real 0m0.310s
user 0m0.241s
sys 0m0.054s
--------------------------
time /usr/bin/php test.php
real 0m0.289s
user 0m0.238s
sys 0m0.050s
PHP7版本测试:
time /usr/local/php7/bin/php test.php
real 0m0.087s
user 0m0.063s
sys 0m0.024s
-------------------------------------
time /usr/local/php7/bin/php test.php
real 0m0.106s
user 0m0.073s
sys 0m0.033s
--------------------------------------
time /usr/local/php7/bin/php test.php
real 0m0.083s
user 0m0.061s
sys 0m0.022s
通过数据可以看出来,单纯的php脚本测试,可以看出php7性能提升了3到4倍。
2.php数据库操作测试
首先我们创建一个用户表:
Table: test_user
Create Table: CREATE TABLE `test_user` (
`uid` int(11) NOT NULL AUTO_INCREMENT,
`name` char(100) NOT NULL DEFAULT '',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
给test_user表插入一条数据:
insert into test_user (uid,name) values (1,"dada");
MariaDB [test]> select * from test_user;
+-----+------+
| uid | name |
+-----+------+
| 1 | dada |
+-----+------+
创建数据库测试脚本test_db.php,确保你的两个PHP版本都安装了PDO扩展。
/usr/bin/php -m|grep pdo
pdo_mysql
pdo_sqlite
/usr/local/php7/bin/php -m|grep pdo
pdo_mysql
pdo_sqlite
我的两个PHP版本已经安装了PDO(不要再使用php_mysql扩展,已经过时了,PHP7已经完全抛弃,mysqli也不建议使用)。
接下来我们通过PDO编写脚本,测试select执行50万次的性能对比:
$host = "yourHost";
$user = "yourUser";
$pass = "yourPass";
$db = "test";
$port = 3306;
try
{
$dbh = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
echo "Connected<p>";
}
catch (Exception $e)
{
echo "Unable to connect: " . $e->getMessage() ."<p>";
}
$sql = "select SQL_NO_CACHE * from test_user;";
$tmp = array();
for ($i=1; $i<=500000; $i++) {
$ret = $dbh->query($sql);
foreach ($ret as $row) {
$tmp['id'] = $row['id'];
$tmp['name'] = $row['name'];
}
}
PHP5测试test_db.php:
time /usr/bin/php test_db.php
real 0m48.396s
user 0m11.149s
sys 0m3.998s
real 0m51.447s
user 0m11.800s
sys 0m4.395s
real 0m51.517s
user 0m11.733s
sys 0m4.439s
PHP7测试test_db.php:
real 0m47.900s
user 0m9.875s
sys 0m4.130s
real 0m46.977s
user 0m9.760s
sys 0m3.983s
real 0m50.010s
user 0m10.268s
sys 0m4.307s
这次脚本执行了50w次查询,user执行时间PHP7执行的脚本几乎都比PHP5要少一秒!是少一秒不是一毫秒。
3.PHP框架测试
-
thinkphp
国内肯定是首选thinkphp框架,选择最新的thinkphp5。我这里直接在官网下载的thinkphp5.0.9版本。
- (一)框架入口测试
PHP5下的测试:
time /usr/bin/php ./public/index.php
real 0m0.036s
user 0m0.026s
sys 0m0.010s
real 0m0.038s
user 0m0.026s
sys 0m0.012s
real 0m0.041s
user 0m0.032s
sys 0m0.009s
PHP7下的测试:
time /usr/local/php7/bin/php ./public/index.php
real 0m0.027s
user 0m0.021s
sys 0m0.005s
real 0m0.027s
user 0m0.018s
sys 0m0.009s
real 0m0.025s
user 0m0.023s
sys 0m0.002s
在入口测试下,可以看到PHP和PHP7没有太大的区别,但PHP7还是稍微快一点。
- (二)框架逻辑测试
在框架入口复用第一步的逻辑:
<?php
namespace appindexcontroller;
class Index
{
public function index()
{
$arr = array();
for ($i = 0; $i < 500000; $i++) {
$arr[$i] = $i;
}
$tmp = array();
foreach ($arr as $i) {
if ($i % 2 == 0) {
$is_exists = array_key_exists($i, $arr);
if ($is_exists) {
array_push($tmp, $i);
}
}
}
}
}
PHP5版本:
time /usr/bin/php ./public/index.php
real 0m0.538s
user 0m0.463s
sys 0m0.072s
real 0m0.454s
user 0m0.386s
sys 0m0.065s
real 0m0.387s
user 0m0.331s
sys 0m0.055s
PHP7版本:
time /usr/local/php7/bin/php ./public/index.php
real 0m0.150s
user 0m0.123s
sys 0m0.024s
real 0m0.137s
user 0m0.105s
sys 0m0.031s
real 0m0.123s
user 0m0.096s
sys 0m0.026s
在thinkphp框架中使用PHP7版本,性能提升大约是PHP5版本的4倍!
-
laravel
然后我们测试下现在最火热的PHP艺术家的框架。
- (一) 框架入口测试
PHP5版本:
time /usr/bin/php ./public/index.php
real 0m0.104s
user 0m0.081s
sys 0m0.022s
real 0m0.148s
user 0m0.122s
sys 0m0.025s
real 0m0.122s
user 0m0.100s
sys 0m0.021s
PHP版本
time /usr/local/php7/bin/php ./public/index.php
real 0m0.079s
user 0m0.064s
sys 0m0.015s
real 0m0.081s
user 0m0.067s
sys 0m0.014s
real 0m0.067s
user 0m0.054s
sys 0m0.013s
我们可以看到laravel的框架入口测试中,PHP5和PHP7的表现差异不大,但即使PHP5最高快的0.081s也比PHP7版本最慢的0.067s要慢。所以PHP7还是更胜一筹。
- (二)框架逻辑测试
尝试增加一点逻辑,和thinkphp一样,复用测试逻辑。
首先修改laravel路由,直接调用UserController的index方法:
Route::get('/', 'UserController@index');
在index方法中写入测试逻辑:
public function index()
{
$arr = array();
for ($i = 0; $i < 500000; $i++) {
$arr[$i] = $i;
}
$tmp = array();
foreach ($arr as $i) {
if ($i % 2 == 0) {
$is_exists = array_key_exists($i, $arr);
if ($is_exists) {
array_push($tmp, $i);
}
}
}
}
PHP5版本
time /usr/bin/php ./public/index.php
real 0m0.510s
user 0m0.377s
sys 0m0.079s
real 0m0.627s
user 0m0.447s
sys 0m0.091s
real 0m0.519s
user 0m0.436s
sys 0m0.079s
PHP7版本
time /usr/local/php7/bin/php ./public/index.php
real 0m0.201s
user 0m0.167s
sys 0m0.032s
real 0m0.216s
user 0m0.174s
sys 0m0.040s
real 0m0.169s
user 0m0.134s
sys 0m0.034s
PHP7性能提升了3到4倍
压力测试
1000个请求,50个并发
- PHP5版本:
![](https://upload-images.jianshu.io/upload_images/21868-341ddb605ccf48aa.png)
三次样本如下:
![](https://upload-images.jianshu.io/upload_images/21868-3d66bfd32ea39023.png)
![](https://upload-images.jianshu.io/upload_images/21868-6432fa12453dea14.png)
![](https://upload-images.jianshu.io/upload_images/21868-a585d9670c7feca9.png)
-
PHP7版本:
1
![](https://upload-images.jianshu.io/upload_images/21868-7b7e1957025ed589.png)
![](https://upload-images.jianshu.io/upload_images/21868-e23435e48d15626a.png)
![](https://upload-images.jianshu.io/upload_images/21868-d8639df8c203cfbd.png)
通过压力测试,在PHP7版本下,可以看到单个请求时间和请求完成时间以及每个连接请求实际运行时间的平均值都耗时更少,最重要的性能指标QPS也是高于PHP5的版本。
PHP7的opcache性能测试
开启opcache:
![](https://upload-images.jianshu.io/upload_images/21868-23ec586a04a76e2d.png)
![](https://upload-images.jianshu.io/upload_images/21868-ebc3b602a0c66236.png)
![](https://upload-images.jianshu.io/upload_images/21868-e6e3ce15ea2aa58c.png)
![](https://upload-images.jianshu.io/upload_images/21868-7d38bce91c3e482d.png)
卧槽!开启了opcache的PHP7果然是要起飞的节奏,相比未开启的PHP7性能提升了十几倍,相比PHP5提升了将进20倍!问你怕不怕!
PHP脚本测试数据如下:
![](https://upload-images.jianshu.io/upload_images/21868-59282c94b79b599b.png)
纯php脚本测试过程,PHP7性能大约是PHP5的3到4倍。
压力测试数据如下:
![](https://upload-images.jianshu.io/upload_images/21868-24c7be84784d0fcb.png)
结论:
本文对PHP7和PHP5进行简单对比,性能确实有3到4倍提升,无论是在php纯脚本中,还是在框架中,PHP7高性能的表现都是一致的。
PHP7很快,PHP7+OpCache飞快,PHP7确实牛逼,PHP的新时代已来临,赶紧用起来!