php7新特性一览
1.太空船操作符
用于比较2个表达式,例如当\(a小于,等于或大于\)b时,分别返回-1,0,1
echo 1 <=> 1; //0
echo PHP_EOL;
echo 1 <=> 2; //-1
echo PHP_EOL;
echo 2 <=> 1; //1
2.标量类型和返回值类型声明
- php7可对字符串(string),整型(int),浮点以及布尔类型的参数做声明。
- 参数类型声明不受制于默认模式和严格模式,默认模式下,当传入的参数不符合声明类型时,会首先尝试类型转换(这里的类型转换仅仅适用于可转换的类型,把'a'转换为Int也会报错),而严格模式下则直接报错
declare(strict_types=1); //strict_types=1表示严格模式
function sum(int ...$ints){
return array_sum($ints);
}
var_dump(sum(1,'2','3.1',4.1));
执行结果
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given
- 如果关闭严格模式,传入的参数会先转换为Int,结果为10
返回值类型受限制的
下面代码声明返回值为int
declare(strict_types=1);
function sum(int ...$ints):int
{
return array_sum($ints);
}
var_dump(sum(1,2,3)); //6
php7.1对函数返回值类型做了扩充,可定义返回值类型为void,无论是否开启严格模式,只要函数有"return;" 以外的其它return语句都会报错
declare(strict_types=1);
function sum(int ...$ints):void
{
// return NULL; //报错
return ; //后面有 "return;"之外的语句也报错
// return array_sum($ints);
}
var_dump(sum(1,2,3));
php7.1对参数类型和返回值类型还有进一步的支持,其类型可以使空类型,在参数或者返回值类型声明前加上"?"表示要么是null,要么是声明的类型
declare(strict_types=1);
function test(?int $a):?int
{
return $a;
}
var_dump(test(null)); //NULL
var_dump(test(1)); //int(1)
var_dump(test('a')); // Fatal error
3.null合并操作符
$page=isset($_GET['p'])?$_GET['p']:0;
//php7
$page =$_GET['p'] ??0;
//三元运算符
$page =$_GET['p'] ?? $_POST['p'] ??0;
4.常量数组
php7之前无法通过define来定义一个常量数组的,php7支持了这个操作
define('STUDENT',['boy','girl']);
print_r(STUDENT);
5.namespace批量导入
//php之前
use Space\ClassA;
use Space\ClassB;
use Space\ClassC C;
//php7
use Space\{ClassA,ClassB,ClassC as C};
6.throwable接口
在php7之前,如果代码中有语法错误或者fatal error时,程序会直接报错退出,php7中实现了全局throwable接口,原来的Exception和部分Error实现了该接口
这种Error可以像Exception一样被第一个匹配的try/catch块捕获。如果没有匹配的catch块,则调用异常函数处理。如果尚未注册异常处理函数,则按照传统方式处理(Fatal error)
Error类并非继承自Exception,所以不能用catch(Exception $e){}来捕获,可用catch(Error $e){} ,或者通过注册异常处理函数(set_exception_handler())来捕获Error
try{
abc();
}catch (Error $e){
print_r($e);
}
echo 123;
php5里 Fatal error ,立即退出 之后的代码不会执行了
php7里
Error Object
(
[message:protected] => Call to undefined function abc()
[string:Error:private] =>
[code:protected] => 0
[file:protected] => /mnt/hgfs/www/web/md.php
[line:protected] => 4
[trace:Error:private] => Array
(
)
[previous:Error:private] =>
)
123
或者通过注册异常处理函数来处理
set_exception_handler(function($e){
echo "err:".print_r($e,true);
});
abc();
echo 123;
php7下结果,php5依然Fatal error
err:Error Object
(
[message:protected] => Call to undefined function abc()
[string:Error:private] =>
[code:protected] => 0
[file:protected] => /mnt/hgfs/www/web/md.php
[line:protected] => 7
[trace:Error:private] => Array
(
)
[previous:Error:private] =>
)
之后的也不会执行了
7.Closure::call()
在php7之前,当动态的给一个对象添加方法时,可以通过Closure来复制一个闭包对象,并绑定到一个$this对象和类作用域
class People{
private $age=10;
}
$f=function(){
return $this->age+1;
};
$p=$f->bindTo(new People,'People');
echo $p();
在php7可通过call来暂时绑定一个闭包对象到$this对象并调用它
class People{
private $age=10;
}
$f=function(){
return $this->age+1;
};
echo $f->call(new People);
8.intdiv
echo intdiv(10,3);
9.list方括号写法
$a=[1,2,3];
list($n1,$n2,$n3)=$a;
//php7
[$n1,$n2,$n3]=[4,5,6]; //[]并不是数组,而是list的简略形式
10.foreach遍历数组不再修改内部指针
$arr=[1,2,3,4,5,6];
foreach ($arr as $key => $value) {
if($value ==2) break;
}
echo current($arr);//php7下 1,php5下 3
11.匿名类可以使用 new class来定义,匿名类可以使用来代替完整的定义
interface Cache{
public function read ();
}
class Ca {
private $cache;
public function setcache(Cache $cache){
$this->cache=$cache;
}
}
$fcache =new Ca;
$fcache->setcache(new Class implements Cache {
public function read(){
}
});
其它,移除ASP和script PHP标签,移除$HTTP_RAW_POST_DATA、匿名类、常量类可见性等
php7新特性一览的更多相关文章
- 【php】php7新特性及其优化原理
php7.x版本系列相比之前的php的版本提交性能提高了不少,这里面其中的一些主要改变是性能提高的关键,主要有以下内容. 1.zval使用栈内存 在zend引擎和扩展中,经常要创建php变量,其底 ...
- Java单元測试工具JUnit 5新特性一览
Java单元測试工具JUnit 5新特性一览 作者:chszs,未经博主同意不得转载. 经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs JUnit是最流行的开源 ...
- IntelliJ IDEA 16 EAP新特性一览
IntelliJ IDEA 16 EAP新特性一览 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs IntelliJ I ...
- PHPStorm使用PHP7新特性出现红色波浪错误
今天在项目中使用PHP7新特性时PHPStorm出现了如下红色错误,看着让人很不舒服,明明没有错 本地配置LNMP的PHP版本是7.2所以不是安装的PHP版本过低的问题,而是PHPStorm默认支持的 ...
- (数据科学学习手札111)geopandas 0.9.0重要新特性一览
本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...
- (数据科学学习手札129)geopandas 0.10版本重要新特性一览
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...
- (数据科学学习手札139)geopandas 0.11版本重要新特性一览
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...
- PHP7 新特性 简介
整理了一些常用的新特性,欢迎点赞!!! 新增操作符 1.?? $username = $_GET['user'] ?? ''; $username = isset($_GET['user']) ? $ ...
- PHP7新特性
重写ZenVM,性能比PHP5.6提升300% 新特性: 1.变量类型(为PHP7.1的JIT特性做准备)function test(int $a, string $b, array $c) : in ...
随机推荐
- 内核加载模块时提示usb_common: exports duplicate symbol of_usb_get_dr_mode
1.分析: 既然符号重复了,那么说明有一个部分既被编译到内核中也被编译成模块了,因此在加载模块时,内核报符号重复的提示 2.解决 直接配置内核的某一部分编译成模块,例如笔者就直接将USB这一部分编译成 ...
- 【软件位置】Linux查看软件安装的位置
如果我们在Linux 系统上安装了某个软件,我们可以通过如下的三种方式来确定. 一. Which 命令 Shell 的which 命令可以找出相关命令是否已经在搜索路径中. 如: [ro ...
- POJ 3613 Cow Relays(floyd+快速幂)
http://poj.org/problem?id=3613 题意: 求经过k条路径的最短路径. 思路: 如果看过<矩阵乘法在信息学的应用>这篇论文就会知道 现在我们在邻接矩阵中保存距离, ...
- UVa 11374 机场快线
https://vjudge.net/problem/UVA-11374 题意: 机场快线分为经济线和商业线两种,线路.速度和价格都不同.你有一张商业线车票,可以坐一站商业线,而其他时候只能乘坐经济线 ...
- JavaScript--练习1--99乘法表
JavaScript--练习1--99乘法表 一.心得 二.代码 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" &quo ...
- 构建工具 Ant、Maven和Gradle
构建工具的作用 依赖管理 测试,打包,发布 主流的构建工具 Ant:提供编译,测试,打包 Maven:在Ant的基础上提供了依赖管理和发布的功能 Gradle:在Maven的基础上使用Groovy管理 ...
- 雷林鹏分享:Ruby 异常
Ruby 异常 异常和执行总是被联系在一起.如果您打开一个不存在的文件,且没有恰当地处理这种情况,那么您的程序则被认为是低质量的. 如果异常发生,则程序停止.异常用于处理各种类型的错误,这些错误可能在 ...
- idea JMX 连接器服务器通信错误
错误描述:错误: JMX 连接器服务器通信错误: service:jmx:rmi://DESKTOP-46OA4KK 打开Edit Configurations 发现vm options那一栏居然是空 ...
- ssh 上传文件以及文件夹到linux服务器
闲来无事分享一篇,帮助到你的话,麻烦给老弟点个关注.经常会分享一些实用技能. 回归正题,现在服务器linux很多.是不是不会传文件?别急 下面就是方法: 一.上传文件到linux服务器 首先从你本地切 ...
- OAF调用JavaScript新开窗口
在OAF框架中,ORACLE标准本身并不推荐使用JS,但是仍然提供了相应的方法. String oaUrl="https://www.baidu.com/"; pageContex ...