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差几十倍甚 ...
随机推荐
- 新的玩具:Windows上的awesome
平铺式窗口管理器 基于xwindow(Linux/Unix采用的图形系统)有成千上百种窗口管理器.其中有一类窗口管理器很古怪,所有应用程序的窗口没有互相遮挡,而是平铺到屏幕上,这类窗口管理器叫 平铺式 ...
- F - Number of Connected Components UVALive - 7638 (并查集 + 思维)
题目链接:https://cn.vjudge.net/contest/275589#problem/F 题目大意:就是给你n个数,如果说两个数之间的gcd!=1,那么就将这两个点连起来,问你最终这些点 ...
- 彻底搞懂字符编码(unicode,mbcs,utf-8,utf-16,utf-32,big endian,little endian...)[转]
最近有一些朋友常问我一些乱码的问题,和他们交流过程中,发现这个编码的相关知识还真是杂乱不堪,不少人对一些知识理解似乎也有些偏差,网上百度, google的内容,也有不少以讹传讹,根本就是错误的(例如说 ...
- 【黑客免杀攻防】读书笔记14 - 面向对象逆向-虚函数、MFC逆向
虚函数存在是为了克服类型域解决方案的缺陷,以使程序员可以在基类里声明一些能够在各个派生类里重新定义的函数. 1 识别简单的虚函数 代码示例: #include "stdafx.h" ...
- CertUtil.exe被利用来下载恶意软件
1.前言 经过国外文章信息,CertUtil.exe下载恶意软件的样本. 2.实现原理 Windows有一个名为CertUtil的内置程序,可用于在Windows中管理证书.使用此程序可以在Windo ...
- 1 - django-介绍-MTV-命令-基础配置-admin
目录 1 什么是web框架 2 WSGI 3 MVC与MTV模式 3.1 MVC框架 3.2 MTV框架 3.3 区别 4 django介绍 4.1 Django处理顺序 4.2 创建django站点 ...
- python字典解析
import json # coding: utf-8 from functools import singledispatch from collections import abc import ...
- easyui表单提交验证form
方式一,不需要考虑jquery.easyui.min.js版本 <script> $(function () { //针对 设置 novalidate:true $('.validateb ...
- 一张图教会CSS3倒影
分享 示例图片 在CSS3之前,想要实现示例图片这样的一个倒影效果一般只能通过处理图片的方式,而CSS3问世之后,想要实现这样的效果变得非常简单,只需一个CSS3属性就可以轻松实现了. 这就是今天所要 ...
- 十八、springboot中hibernate配置sessionFactory访问数据库
前提 在yml或properties文件中配置数据库与数据库连接池 Hibernate配置 几种方式: 方式一: @Configuration public class HibernateConfig ...