PHP7.0新增功能分析
发布时间:2022-07-02 16:16:47 所属栏目:PHP教程 来源:互联网
导读:这一篇主要是来详细分析php7.0的新增功能。 一、性能与底层 PHP7速度是 PHP5.6 的两倍 php7 最显著的变化就是性能的极大提升,已接近Facebook开发的PHP执行引擎HHVM。在WordPress基准性能测试中,速度比5.6版本要快2~3倍,大大减少了内存占用。PHP7在语言上
这一篇主要是来详细分析php7.0的新增功能。 一、性能与底层 PHP7速度是 PHP5.6 的两倍 php7 最显著的变化就是性能的极大提升,已接近Facebook开发的PHP执行引擎HHVM。在WordPress基准性能测试中,速度比5.6版本要快2~3倍,大大减少了内存占用。PHP7在语言上也有一些变化,比如添加返回类型声明、增加了一些新的保留关键字等。在安全方面,去除了PHP安全模式,添加魔术引号等。不仅如此,新版还支持64位,而且包含最新版Zend引擎。 测试一下 很简单的一个例子,生成一个 60 万元素的数组,通过查找key 的方式,来确定key是否存在。 <?php $a = []; for($i=0;$i<600000;$i++){ $a[$i] = $i; } foreach($a as $item) { array_key_exists($item, $a); } 我们分别在php5.6.11和php7.0.4来测试下性能。 php5.6.11 ➜ time php 1.php 0.67s user 0.06s system 67% cpu 1.078 total ➜ time php 1.php 0.68s user 0.06s system 98% cpu 0.748 total ➜ time php 1.php 0.65s user 0.06s system 67% cpu 1.052 total 三次平均下来,大致是 user使用 0.65秒,system使用0.06秒,67%的cpu率。总共1秒左右。 再看php7的情况 ➜ time /usr/local/opt/php70/bin/php 1.php 0.52s user 0.02s system 98% cpu 0.544 total ➜ time /usr/local/opt/php70/bin/php 1.php 0.49s user 0.02s system 99% cpu 0.513 total ➜ time /usr/local/opt/php70/bin/php 1.php 0.51s user 0.02s system 98% cpu 0.534 total 对比下来,user使用时间下降20%左右,system使用时间下降70%,cpu使用率更高高达98%。总体时间减少为。0.5秒。 这个例子看下来,效率提供了2倍。确实不错。 再看一个例子。同样也是生成一个 60 万元素的数组,查找 value是否存在。 <?php $a = []; for($i=0;$i<600000;$i++){ $a[$i] = $i; } foreach($a as $i) { array_search($i, $a); } ?> 先看php5.6.11 ➜ testPHP time php 2.php 0.68s user 0.03s system 66% cpu 1.077 total ➜ testPHP time php 2.php 0.68s user 0.02s system 98% cpu 0.710 total ➜ testPHP time php 2.php 0.68s user 0.02s system 98% cpu 0.713 total ➜ testPHP time php 2.php 0.69s user 0.02s system 98% cpu 0.721 total 再接着看php7.0.4 ➜ testPHP time /usr/local/opt/php70/bin/php 2.php 0.12s user 0.02s system 69% cpu 0.201 total ➜ testPHP time /usr/local/opt/php70/bin/php 2.php 0.11s user 0.01s system 97% cpu 0.131 total ➜ testPHP time /usr/local/opt/php70/bin/php 2.php 0.11s user 0.01s system 96% cpu 0.130 total 明显看出,快了6倍多。厉害。 二、新特性 1. 更多的标量类型声明 现在php的标量有两种模式: 强制 (默认) 和严格模式。 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 (bool)。它们扩充了PHP5中引入的其他类型:类名,接口,数组和 回调类型。在旧版中,函数的参数申明只能是(Array $arr)、(CLassName $obj)等,基本类型比如Int,String等是不能够被申明的。 怎么理解呢?php7之前的版本,我们要想限定一个函数的参数的类型,只有array或者class2种。 php7之前: class MyInfo { public $a = 123; public function getInfo(array $a, $b) { var_dump($a, $b); } } function getClass(MyInfo $a) { var_dump($a->a); } 我们想限定 getInfo的第一个参数,必须是数组,所以,我们可以在参数$a前加一个array。来申明。 同样,我们想getClass的参数,必须是一个类,所以我们就用这个类的className前坠来申明,起到强制使用的目的。 php7之前,只有这2种标量可以使用。 我们来使用一下: $info = new MyInfo(); $info->getInfo([1,2,3,4], 4); 我们按照规定的来,第一个参数,传数组,结果当然是正常打印: ➜ testPHP php 3.php array(3) { [0] => int(1) [1] => int(2) [2] => int(3) } int(4) 要是我们不安装规定来,就会报知名错误: $info = new MyInfo(); $info->getInfo(122, 0); 报错: PHP Catchable fatal error: Argument 1 passed to MyInfo::getInfo() must be of the type array, integer given, called in /Users/yangyi/www/testPHP/3.php on line 25 and defined in /Users/yangyi/www/testPHP/3.php on line 8 PHP Stack trace: PHP 1. {main}() /Users/yangyi/www/testPHP/3.php:0 PHP 2. MyInfo->getInfo() /Users/yangyi/www/testPHP/3.php:25 使用类也一样: $info = new MyInfo(); getClass($info); 输出结果: ➜ testPHP php 3.php int(123) 同样,我们传入别的参数,就会报错: getClass(123); ➜ testPHP php 3.php PHP Catchable fatal error: Argument 1 passed to getClass() must be an instance of MyInfo, integer given, called in /Users/yangyi/www/testPHP/3.php on line 27 and defined in /Users/yangyi/www/testPHP/3.php on line 17 PHP Stack trace: PHP 1. {main}() /Users/yangyi/www/testPHP/3.php:0 PHP 2. getClass() /Users/yangyi/www/testPHP/3.php:27 我们回到这次php7的升级,它扩充了标量的类型,增加了bool、int、string、float。 php7有2种两种模式: 强制 (默认) 和严格模式。 强制模式 强制模式是默认模式,强制模式下,它会帮我们把数字类型的string类型,int整型,bool,强制类型。其他类型不能转换,就会报错。 (编辑:开发网_开封站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |