您现在的位置: 365建站网 > 365学习 > php7和php5区别对比 不同之处和运行效率比较

php7和php5区别对比 不同之处和运行效率比较

文章来源:365jz.com     点击数:1339    更新时间:2018-11-04 08:01   参与评论

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标量类型和返回类型声明

#主要分为两种模式,强制性模式和严格模式
declare(strict_types=1)
#1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。


2、NULL合并运算符

$site = isset($_GET['site']) ? $_GET['site'] : 'wo';
#简写成
$site = $_GET['site'] ??'wo';


3、组合预算符

// 整型比较
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、常量数组

// 使用 define 函数来定义数组
define('sites', [
   'Google',
   'Jser',
   'Taobao'
]);
print(sites[1]);


5、匿名类

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()方法增加,意思向类绑定个匿名函数

<?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 语句改变

#可以导入同一个namespace下的类简写
use some\namespace\{ClassA, ClassB, ClassC as C};


10、Session 选项

1.session_start()可以定义数组
<?php
session_start(&#91;
   'cache_limiter' => 'private',
   'read_and_close' => true,
]);
?>
2.引入了一个新的php.ini设置(session.lazy_write),默认情况下设置为 true,意味着session数据只在发生变化时才写入。


11、PHP 7 移除的扩展

ereg
mssql
mysql
sybase_ct



为什么 PHP7 比 PHP5 性能提升了?


1、变量存储字节减小,减少内存占用,提升变量操作速度


2、改善数组结构,数组元素和hash映射表被分配在同一块内存里,降低了内存占用、提升了 cpu 缓存命中率


3、改进了函数的调用机制,通过优化参数传递的环节,减少了一些指令,提高执行效率


传说php7 运行效率极高,是真的吗?我来亲自试试,代码如下:

<?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运行情况

100001运行时间: 3 - 7 毫秒耗费内存: 0.109375 K


php5.5运行情况

100001运行时间: 18 - 30 毫秒耗费内存: 0.671875 K


看来真的是快了不少啊!!! 时间节省了6倍,内存节省了6倍。非常不错的数据!

不过站长们升级php7还是需要谨慎,因为很多插件还没有更新! 比如最新的memcache扩展还没有发布等等.....

我们可以提前学习php7的变化,待其成熟果断使用!!


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛


发表评论 (1339人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片
最新评论
------分隔线----------------------------