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)
php7的新特性的更多相关文章
- php7.0 和 php7.1新特性
PHP7.1 新特性 1.可为空(Nullable)类型 类型现在允许为空,当启用这个特性时,传入的参数或者函数返回的结果要么是给定的类型,要么是 null .可以通过在类型前面加上一个问号来使之成为 ...
- 浅谈PHP7的新特性
我以前用过的php的最高版本是php5.6.在换新工作之后,公司使用的是PHP7.据说PHP7的性能比之前提高很多.下面整理下php7的新特性.力求简单了解.不做深入研究. 1.变量类型声明 函数的参 ...
- 《PHP7底层设计与源码实现》学习笔记1——PHP7的新特性和源码结构
<PHP7底层设计与源码实现>一书的作者陈雷亲自给我们授课,大佬现身!但也因此深感自己基础薄弱,遂买了此书.希望看完这本书后,能让我对PHP7底层的认识更上一层楼.好了,言归正传,本书共1 ...
- [转+自]关于PHP7的新特性(涉及取反和disabled_functions绕过)
PHP7和PHP5上的安全区别 preg_replace()不再支持/e修饰符 利用\e修饰符执行代码的后门大家也用了不少了,具体看官方的这段描述: 如果设置了这个被弃用的修饰符, preg_repl ...
- PHP7.x新特性
1.太空船操作符太空船操作符用于比较两个表达式. 当$a小于. 等于或大于$b时它分别返回-1. 0或1. // Integers echo 1 <=> 1; // 0 echo 1 &l ...
- PHP7.1新特性一览
PHP7.0的性能是PHP5.6的两倍 http://www.phpchina.com/article-40237-1.html 可空类型 list 的方括号简写 void 返回类型 类常量属性设定 ...
- PHP7.0新特性
http://blog.csdn.net/h330531987/article/details/74364681 反射 闭包 trait 还有数组
- [PHP7.0-PHP7.2]的新特性和新变更
php7发布已经升级到7.2.里面发生了很多的变化.本文整理php7.0至php7.2的新特性和一些变化. 参考资料: http://php.net/manual/zh/migration70.new ...
- php 7.0 新特性
php 7 主题是性能优化 SEO 之前版本:开发效率快,语言本身性能差 普通的php网站:IO密集型,瓶颈在mysql上,体现不出来php的性能劣势,在密集计算方面比C,C++,JAVA差几十倍甚 ...
随机推荐
- 6 Easy Steps to Learn Naive Bayes Algorithm (with code in Python)
6 Easy Steps to Learn Naive Bayes Algorithm (with code in Python) Introduction Here’s a situation yo ...
- Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)
前面我们说到多线程带来的风险,其中一个很重要的就是安全性,因为其重要性因此,放到本章来进行讲解,那么线程安全性问题产生的原因,我们这节将从底层字节码来进行分析. 一.问题引出 先看一段代码 packa ...
- 简易jQuery插件
之前写过jQuery插件的笔记 如何用jQuery封装插件 我一直觉得前面讲了一大堆闭包和三种插件封装模式有点冗余,那篇笔记我直到记录到后面才发现这事情很简单,想来想去还是觉得网上的一些文章把事情搞复 ...
- node的“宏任务(macro-task)”和“微任务(micro-task)”机制
macrotask 和 microtask 表示异步任务的两种分类.在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task que ...
- 2016.5.21——Compare Version Numbers
Compare Version Numbers 本题收获: 1.字符串型数字转化为整型数字的方法:s[i] - '0',( 将字母转化为数字是[i]-'A' ) 2.srt.at(),substr ...
- JS简介——(一)
0.结构
- 利用正则表达式去除所有html标签,只保留文字
后台将富文本编辑器中的内容返回到前端时如果带上了标签,这时就可以利用这种方法只保留文字. 标签的格式有以下几种 1.<div class="test"></div ...
- 7 SQL优化技术
7.1 改变访问结构 7.2 修改SQL语句 SELECT deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp); SELEC ...
- Codeforces Round #504 E. Down or Right
Codeforces Round #504 E. Down or Right 题目描述:交互题. 有一个\(n \times n\)的方阵,有一些格子是障碍,从\((1, 1)\)出发,只能向右向下走 ...
- centos6.9系统优化
仅供参考 有道云笔记链接->