美文网首页PHP
PHP7的一些特性

PHP7的一些特性

作者: Gundy_ | 来源:发表于2016-12-01 15:29 被阅读19次

运算符(NULL 合并运算符)

$a = $_GET['a'] ?? 1;

函数返回值类型声明

<php 
function arraysSum(array ...$arrays): array 
{ 
    return array_map(function(array $array): int { 
        return array_sum($array); 
    }, $arrays); 
} 
 
print_r(arraysSum([1,2,3], [4,5,6], [7,8,9])); 

标量类型声明

<php 
// Coercive mode 
function sumOfInts(int ...$ints) 
{ 
    return array_sum($ints); 
} 
 
var_dump(sumOfInts(2, '3', 4.1)); 

use 批量声明

<php 
use some/namespace/{ClassA, ClassB, ClassC as C}; 
use function some/namespace/{fn_a, fn_b, fn_c}; 
use const some/namespace/{ConstA, ConstB, ConstC}; 

新增的几个操作符

//<=> - 比较两个数的大小【-1:前者小于后者,0:前者等于后者,1:前者大于后者】
echo 1 <=> 2;//-1
echo 1 <=> 1;//0
echo 1 <=> 0;//1
 
// ** - 【a的b次方】
echo 2 ** 3;//8
 
//?? - 三元运算符的改进
//php5
$_GET['name'] ? $_GET['name'] : '';//Notice: Undefined index: …
//php7
$_GET['name'] ?? '' -> '';
 
//\u{xxxx} - Unicode字符的解析
echo "\u{4f60}";//你
echo "\u{65b0}";//新

foreach循环的改进

//PHP5
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a));}
int(2)
int(2)
int(2)
 
$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a));}
int(2)
int(3)
bool(false)
 
$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a));}
int(1)
int(1)
int(1)
 
//PHP7:不再操作数据的内部指针了
$a = array(1, 2, 3);foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)
 
$a = array(1, 2, 3);$b=&$a;foreach ($a as $v){var_dump(current($a))
int(1)
int(1)
int(1)
 
$a = array(1, 2, 3);$b=$a;foreach ($a as $v){var_dump(current($a))}
int(1)
int(1)
int(1)

使用新的Zend Array替换之前的HashTale结构

我们php程序中使用最多、最有用、最方便、最灵活的就是数组了,而php5它的底层就是HashTable实现的,php7使用了新的Zend Array类型,性能和访问速度上都有了大幅度提升!一些非常常用,开销不大的的函数直接变成了引擎支持的opcode

使用了新的内存分配,管理方式,减少了内存的浪费核心排序zend_sort的优化

//PHP5 - 快速排序(非稳定排序)
array(1 => 0, 0 => 0)
//PHP7 - 快速排序+选择排序(稳定排序)
array(0 => 0, 1 => 0)

小于16个元素的使用选择排序,大于16个按照16个为单位去分割,分别使用选择排序,然后再全部合起来使用快速排序。排序较之前相比,内部元素由非稳定排序变成稳定排序,减少元素的交换次数,减少对内存的操作次数,性能提升40%

  • ZEND引擎升级到Zend Engine 3,也就是所谓的PHP NG
  • 增加抽象语法树,使编译更加科学
  • 64位的INT支持
  • 统一的变量语法
  • 原声的TLS - 对扩展开发有意义
  • 一致性foreach循环的改进
  • 新增 <=>、**、?? 、\u{xxxx}操作符
  • 增加了返回类型的声明
  • 增加了标量类型的声明
  • 核心错误可以通过异常捕获了
  • 增加了上下文敏感的词法分析

相关文章

  • 高性能PHP7【笔记】

    一、搭建环境 二、PHP7新特性 A.OOP特性 1.类型声明 PHP7支持的形参类型声明的类型有整型、浮点型、字...

  • 你真的了解现在的PHP吗?(1)

    前段时间,公司的项目从PHP5.3升级到PHP7,现在项目里开始使用PHP7的一些新语法和特性。反观PHP的5.4...

  • PHP7的一些特性

    运算符(NULL 合并运算符) $a = $_GET['a'] ?? 1; 函数返回值类型声明 标量类型声明 us...

  • PHP7 新特性你知道多少?

    PHP7 新特性你知道多少? 2015.12.3发生了两件大事,PHP7问世了,Swift开源了。 最好的语言发布...

  • PHP7 特性

    新特性 7.2与7.1的区别允许重写抽象方法(Abstract method)通过名称加载扩展 dl() 但PHP...

  • PHP7新特性系列 简介

    PHP7带来了巨大的性能的提升,更加方便的语法,但是只有通过深入的了解,才能够有效地利用这些利好。《PHP7新特性...

  • PHP特性整合 php7特性

    PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来...

  • [PHP7.0-PHP7.2]的新特性和新变更

    php7发布已经升级到7.2.里面发生了很多的变化。本文整理php7.0至php7.2的新特性和一些变化。 参考资...

  • PHP7的新特性

    一、标量类型和返回值类型 代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于...

  • php7 新的特性

    1、标量声明(强制模式【默认】,严格模式) 字符串(string),整数(int),浮点数(floor),布尔值(...

网友评论

    本文标题:PHP7的一些特性

    本文链接:https://www.haomeiwen.com/subject/wmixmttx.html