加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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,强制类型。其他类型不能转换,就会报错。

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读