PHP7 新特性 简介
整理了一些常用的新特性,欢迎点赞!!!
新增操作符
1、??
$username = $_GET['user'] ?? '';
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
2、<=>
$number1 <=> $number2; 当 $number1 小于、等于、大于 $number2 时 分别返回 -1,0,1
新增函数
intdiv(被除数, 除数) — 对除法结果取整
intdiv(3, 2) //1
define 可以定义数组
define('ANIMALS', [
'dog',
'cat',
'bird'
]);
返回类型声明
function test() :int
{
return 1; //true
return '1'; //true
return 'string'; //false
}
标量类型声明
function test(string $name) :int
{
return 22;
}
string integer float boolean
可以捕获核心错误
Error层次结构
Throwable
Error
ArithmeticError
DivisionByZeroError
AssertionError
ParseError
TypeError
Exception
核心排序的优化
php5: array(1=>0, 0=>0) //快速排序(非稳定排序)
php7: array(0=>0, 1=>0) //快速排序+选择排序(稳定排序)
比php5多了个抽象语法数(abstract snytax tree) AST
PHP -> Parser -> AST ->Opcodes -> Execution
性能增加了,内存消耗也在增加但可以忽略不计
匿名类 可以通过new class实例化一个匿名类
function getAnonymousClass($config) {
return new class($config) {};
}
暂时绑定一个方法到对象上并调用
$f = function() {
p($this->name);
};
class F {
private $name = 'F';
}
$f->call(new F);
统一的语法变量
括号不影响行为 从左至右
$a = 'b';
$b = ['1', '2', '3'];
var_dump($$a[1]);
var_dump(($$a)[1]);
php5:
Notice: Uninitialized string offset: 1 in E:\Program Files\phpStudy\WWW\test.php on line 4
Notice: Undefined variable: in E:\Program Files\phpStudy\WWW\test.php on line 4
NULL
Parse error: syntax error, unexpected '[' in E:\Program Files\phpStudy\WWW\test.php on line 4
php7: string(1) "2" string(1) "2"
Expression PHP5 PHP7
$$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
关于命名空间
// Pre PHP 7 code
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;
use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;
// PHP 7+ code
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};
list 的修改
1、
list($array[], $array[], $array[]) = [1, 2, 3];
var_dump($array);
php5: array(3) { [0]=> int(3) [1]=> int(2) [2]=> int(1) }
php7: array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
2、不允许赋空值
list() = $a;
list(,,) = $a;
list($x, list(), $y) = $a;
php7会报错 Fatal error: Cannot use empty list
3、不再支持字符串拆分
$string = "xy";
list($x, $y) = $string;
var_dump($x, $y);
php5: string(1) "x" string(1) "y"
php7: null null
foreach 的修改
变量引用,会影响对数组的循环
$array = [0];
foreach ($array as &$val) {
var_dump($val);
$array[1] = 1;
}
php5:int(0)
php7: int(0) int(1)
参考的源地址:http://www.php7.site/book/php7/variable-changes-22.html
提高php性能的tips:http://www.laruence.com/2015/12/04/3086.html
PHP7 新特性 简介的更多相关文章
- ES6新特性简介
ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...
- 【php】php7新特性及其优化原理
php7.x版本系列相比之前的php的版本提交性能提高了不少,这里面其中的一些主要改变是性能提高的关键,主要有以下内容. 1.zval使用栈内存 在zend引擎和扩展中,经常要创建php变量,其底 ...
- PHPStorm使用PHP7新特性出现红色波浪错误
今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的 ...
- PHP7新特性
重写ZenVM,性能比PHP5.6提升300% 新特性: 1.变量类型(为PHP7.1的JIT特性做准备)function test(int $a, string $b, array $c) : in ...
- PHP7新特性 What will be in PHP 7/PHPNG
本文结合php官网和鸟哥相关文章总结: 官网:http://www.php7.ca/ https://wiki.php.net/phpng PHP7将在2015年10月正式发布,PHP7 ,将会是 ...
- PHP7新特性的介绍
关于PHP 20年的发展历史: 迄今为止最流行的WEB开发语言: 超过82%的网站都会使用PHP作为他们的服务端开发语言: 新特性介绍 PHP NG – Zend Engine 3 抽象语法树 64位 ...
- php7 新特性整理
PHP7 已经出来1年了,PHP7.1也即将和大家见面,这么多好的特性,好的方法,为什么不使用呢,也希望PHP越来越好. 在这里整理 PHP 5.1 ,PHP5.2,PHP5.3,PHP5.4,PHP ...
- php7+新特性
php7已经发布有段时间了,查了下正式版本的发布时间是2015年底,至于具体的新特性,在这里总结一下. 标量类型声明 php7新增了4种类型, 字符串(string), 整数 (int), 浮点数 ( ...
- ECMAScript 6新特性简介
目录 简介 ECMAScript和JavaScript的关系 let和const 解构赋值 数组的扩展 函数的扩展 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言 ...
随机推荐
- 自动监控主从MySQL同步的SHELL脚本
代码如下: #!/bin/bash #check MySQL_Slave Status #crontab time 00:10 MYSQLPORT=`netstat -na|grep "LI ...
- 如何手动添加Android Dependencies包
在ADT16 之前可以在工程里面做关联,eclipse会在工程上自动添加ReferenceLibrary.新版本的ADT修改了第三方jar的导入方式,只需要在工程目录下新建libs文件夹,注意是lib ...
- ipad mini2 ios7 磁盘分析文件夹大小
如果没越狱可以通过, 设置->通用->用量 来查看磁盘占用 越狱之后, 莫名其妙地 "其他" 占了两三个G.. windows下有个好用的工具folder size ...
- C语言 字符串和数字转换函数
atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include <stdlib.h> 定义函数 double at ...
- Android进阶笔记11:ListView篇之ListView显示多种类型的条目(item)
ListView可以显示多种类型的条目布局,这里写显示两种布局的情况,其他类似. 1. 这是MainActivity,MainActivity的布局就是一个ListView,太简单了这里就不写了,直接 ...
- Java基础知识强化之网络编程笔记23:Android网络通信之 Volley(Google开源网络通信库)
联合网上资料学习:http://www.open-open.com/lib/view/open1451223702339.html 一.Volley的介绍 1. Volley简介 在这之前,我们在程序 ...
- Android(java)学习笔记103:Map集合的获取功能
package cn.itcast_01; import java.util.Collection; import java.util.HashMap; import java.util.Map; i ...
- 解析$.grep()源码及透过$.grep()看(两次取反)!!的作用
先上jquery源码: grep: function( elems, callback, inv ) { var retVal, ret = [], i = 0, length = elems.len ...
- [改善Java代码]避开基本类型数组转换列表陷阱
开发中经常用到Arrays和Collections这两个工具类. 在数组和列表之间进行切换.非常方便.但是也会遇到一些问题. 看代码: import java.util.Arrays; import ...
- CSS组件化思考
为什么组件化? 分层设计,代码复用,减少冗余: 维护方便,弹性好: 如何组件化? 目前代码分成三级: 第一级粒度最细,是基础,主要包含字体配置,颜色配置,UI框架(比如MUI或者pure.css): ...