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 ...
随机推荐
- ESXi主机遗忘密码重置密码
ESXi版本:6.0.0 VMware-VMvisor-Installer-6.0.0.update02-3620759.x86_64-Dell_Customized-A00.iso 使用和服务器系统 ...
- CF_863_F(Netflow)
codeforces_863_F 题目大意:给出一个数组的大小(n<=50),以及每个位置填数的范围限制(若无限制,即为1-n),最后求填出数组的最小花费,定义总花费为数组中每个数出现次数的平方 ...
- BZOJ 2756 【SCOI2012】 奇怪的游戏
题目链接:奇怪的游戏 一开始这道题想岔了……想到黑白染色后对总格子数按奇偶性分类讨论,然后没发现奇数个格子的可以直接解方程…… 首先可以发现每次操作是给相邻的两个格子权值加一,因此我们把棋盘黑白染色后 ...
- Java Spring-事务管理概述
2017-11-11 23:05:39 事务(Transaction):是逻辑上一组操作,要么全都成功,要么全都失败. 一.事务的特性 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 ...
- Spring中的@Transactional
spring中的@Transactional基于动态代理的机制,提供了一种透明的事务管理机制,方便快捷解决在开发中碰到的问题. 一般使用是通过如下代码对方法或接口或类注释: @Transactiona ...
- 直方图及low_value、high_value
直方图 Histogram是一种特殊的列统计信息,详细描述了目标列的数据分布情况.存储在数据字典基表 histogram$; 专门为了准确评估分布不均匀的目标列的可选择率.结果集的cardianlit ...
- 008——php字符串中的处理函数(七)
<?php /** *字符串处理函数(六)get_magic_quotes_runtime set_magic_quotes_runtime strip_tags *get_magic_quot ...
- java Web 工程servlet中@WebServlet("/HelloServlet") 是怎么工作的
编写好Servlet之后,接下来要告诉Web容器有关于这个Servlet的一些信息.在Servlet 3.0中,可以使用标注(Annotation)来告知容器哪些Servlet会提供服务以及额外信息. ...
- linux 网络测试命令 长期更新
一.网络测试命令 1.测试 网络连接 发送两包后停发 [oracle@hadoop ~]$ PING www.a.shifen.com (() bytes of data. bytes from tt ...
- Artix-7 50T FPGA试用笔记之Create a simple MicroBlaze System
前言:之前笔者的试用博文提到安富利这块板子非常适合MicroBlaze开发,同时网上关于MicroBlaze的资料非常少(或含糊不清),没有一篇能完整介绍VIVADO SDK的设计流程,所以笔者带来这 ...