php7.0的新特性
今天没事,看了看php的文档,记录php7.0的新特性,或者是自己以前不注意的细节:
1.3元运算符
$a有定义,正常写法
$a = 'dongxuemin';
$b = $a ? $a : '董学敏';
echo $a; // 输出 'dongxuemin'
$a有定义,简写:
$a = 'dongxuemin';
$b = $a ? : '董学敏';
echo $b; // 输出 'dongxuemin'
$a未定义,简写会报错!
$b = $a ? : '董学敏';
echo $b; // 输出 '<span style="font-family: SimSun;">董学敏</span><span style="font-family: SimSun;">',同时有 NOTICE 报错</span>
7.0新增 ??,$a未定义,也不会报错!
$b = $a ?? '董学敏';
echo $b; // 输出 '董学敏'
2.强制类型转换
float转为integer,以前没注意过,小数点后都会被舍弃
$a = 1.6;
$b = (int)$a; // $b = intval($a);
echo $b;// 输出 1 !!!-- 以前一直没注意过,强制转换,会舍去小数点
我们将表单的浮点数转换为整数,一般使用3个四舍五入函数:
floor()
round()
ceil()
3.函数的参数----过一遍手册,笔记点重点
- 按值传递(默认)
- 按引用传递,允许函数内部修改传递的实参的值
- 默认参数,有默认值的参数,靠后放。默认值必须是常量表达式,不能是变量,类成员,或函数调用。可以是4个标量,数组以及null
- php5.0后,引用参数也可以指定默认值!!
- 支持类型约束了,下面列出所有支持的类型
- class/interface(类和接口),要求参数必须继承或实现某个类或接口,满足 instanceof php5.0.0开始支持
- array,必须是数组 php5.1.0开始支持
- callable,语言结构,可以查看手册定义,有一些内置的结构,可通过is_callable()来判断php5.4.0开始支持
- bool,float,int,string php7.0开始支持
举个类的例子:
class C {}
class D extends C {}// This doesn't extend C.
class E {}function f(C $c) {echo get_class($c)."\n";
}f(new C);
f(new D);
f(new E);
输出结果如下
由于E未继承C,报错!
Fatal error: Uncaught TypeError: Argument 1 passed to f() must be an instance of C, instance of E given, called in - on line 14 and defined in -:8
Stack trace:
#0 -(14): f(Object(E))
#1 {main}thrown in - on line 8
还有一个7.0和之前版本的区别是:
类型约束,默认首先会进行类型的自动转换,对于某些特殊的类型,可能无法转换,会报错。php5会报严重错误,而php7会抛出一个 TypeError 异常。
4.也是函数参数相关,这里单独提出来,以前一点都不知道,关于可变数量的参数列表
php5.6+,一共了 “...” 语法。
5.5之前,我们使用3个相关函数:
func_num_args()// 传入的参数的个数
func_get_arg(N)// 返回参数列表的某一项,N从0开始
func_get_args()// 得到参数列表数组
摘自手册几个 ... 的用法:
声明函数形参,使用 ... 用法:
<?php
function sum(...$numbers) { // 使用$numbers来访问参数列表$acc = 0;foreach ($numbers as $n) {$acc += $n;}return $acc;
}echo sum(1, 2, 3, 4);
?>
函数调用使用 ... 用法:
<?php
function add($a, $b) {return $a + $b;
}echo add(...[1, 2])."\n"; // 提供参数,也可以使用...,紧接着一个数组即可$a = [1, 2];
echo add(...$a); // 这种变量解析得到数组也支持
?>
----------------------------------------------------------------------------------------------------------------------------
php新版本,支持了“[]”,声明数组的方式(同js一样了,更简单方便点)
$a = array(1,2,3,4);
$b = [1,2,3,4];
----------------------------------------------------------------------------------------------------------------------------
同普通的形参混用,以及可以对整个其他的形参进行统一类型约束!
<?php
function total_intervals($unit, DateInterval ...$intervals) {<span style="white-space:pre"> </span>// 进行类型约束。第一个参数是普通参数$time = 0;foreach ($intervals as $interval) {$time += $interval->$unit;}return $time;
}$a = new DateInterval('P1D');
$b = new DateInterval('P2D');
echo total_intervals('d', $a, $b).' days';// This will fail, since null isn't a DateInterval object.
echo total_intervals('d', null);
?>
php7.0的新特性相关推荐
- PHP7.0 的新特性
PHP7.0 的新特性经常会被面试官问到,在平时的项目开发中运用它们也会提升一定的代码质量和代码运行性能,可见这个知识点的重要性.不过有很多人都没有去系统的了解掌握,今天我刚好系统整理了一番分享出来. ...
- .NET 4.0 Interop新特性ICustomQueryInterface (转载)
.NET 4.0 Interop新特性ICustomQueryInterface 在.NET Framework v4.0发布的新功能中,在名字空间System.Runtime.InteropServ ...
- .NET Framework 4.0的新特性
本文将揭示.NET 4.0中的3个新特性:图表控件.SEO支持以及ASP.NET 4可扩展的输出缓存. 图表控件 微软向开发者提供了大量可免费下载的图表控件,可以在.NET 3.5 ASP.NET或W ...
- mysql 5.0 php_PHP 5.0的新特性
PHP 5.0的新特性 最近,读者可以从PHP 4.x版本转移到PHP 5.0版本.正如读者期望的那样,在一个新的主要版本中,它做出了一些重要变更.在这个版本中,PHP后台的Zend引擎经过了完全的重 ...
- Tensorflow 2.0的新特性
Tensorflow 2.0的新特性 几天前,Tensorflow刚度过自己的3岁生日,作为当前最受欢迎的机器学习框架,Tensorflow在这个宝座上已经盘踞了近三年.无论是成熟的Keras,还是风 ...
- java 7.0 特性_JDK7.0语法新特性
JDK7.0语法新特性 1,菱形语法(泛型实例化类型自动推断) List list = new ArrayList<>(); // <>这个真的很像菱形 2,在目前版本中,不可 ...
- 盘点Greenplum 6.0六大新特性及展望
导读:本文介绍Greenplum 6.0的新特性. 作者:王春波 来源:大数据DT(ID:hzdashuju) Greenplum 6.0于2019年9月4日正式发布,内核版本从PostgreSQL ...
- C# 8.0 的新特性概览和讲解
本文转自 https://blog.csdn.net/hez2010/article/details/84036742 C# 8.0 的新特性概览和讲解 前言 新的改变 可空引用类型(Nullable ...
- jdk5.0的新特性
jdk的版本在1.4后变化很大,所以叫jdk5.0 下面是总结jdk5.0的新特性: (1)泛型(***) 泛型简介 泛型是J2SE 5.0最重要的特性.他们让你写一个type(类或接口)和创建一个 ...
最新文章
- JSON解析与XML解析的区别
- IDEA中用好Lombok,撸码效率至少提升5倍
- c语言商店自动销售,c语言商店商品管理系统设计报告与源代码.doc
- Visual Studio Code 里针对 SAP Commerce Cloud Impex 文件的语法高亮扩展
- php小于neq qe,PHP模板判断语句eq相等 ne、neq不相等, gt大于, lt小于
- Linux C 中断言assert()使用简介
- (王道408考研数据结构)第四章串-第一节:串的定义和基本操作及存储结构
- 快来学习一下吧!Web前端开发CSS居中的五大方式
- 《Advanced .NET Debugging》 读书笔记 Listing 5-6: Pining的简单示例
- Eclipse 更新Android SDK后,新建项目出现appcompat_v7project的相关问题
- linux chmod命令
- php输出最近N个月的起至时间戳
- wow模型修改器_魔兽世界改模型 wow大脚模型修改器
- pano2vr怎么制作漫游_Pano2VR输出全景漫游以及查看
- 《图解密码技术》笔记
- input隐藏边框和选中样式
- 【Python报错】MemoryError
- 微信开发验证php,解析微信公众平台开发之验证步骤实例(PHP版)
- java5的新特性fore和可变参数
- Kaggle上分技巧——单模K折交叉验证训练+多模型融合