php7.0的新特性
2016-09-18 10:50
501 查看
今天没事,看了看php的文档,记录php7.0的新特性,或者是自己以前不注意的细节:
1.3元运算符
$a有定义,正常写法
$a有定义,简写:
$a未定义,简写会报错!
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开始支持
举个类的例子:
还有一个7.0和之前版本的区别是:
类型约束,默认首先会进行类型的自动转换,对于某些特殊的类型,可能无法转换,会报错。php5会报严重错误,而php7会抛出一个 TypeError 异常。
4.也是函数参数相关,这里单独提出来,以前一点都不知道,关于可变数量的参数列表
php5.6+,一共了 “...” 语法。
5.5之前,我们使用3个相关函数:
func_num_args()// 传入的参数的个数
func_get_arg(N)// 返回参数列表的某一项,N从0开始
func_get_args()// 得到参数列表数组
摘自手册几个 ... 的用法:
声明函数形参,使用 ... 用法:
函数调用使用 ... 用法:
----------------------------------------------------------------------------------------------------------------------------
php新版本,支持了“[]”,声明数组的方式(同js一样了,更简单方便点)
$a = array(1,2,3,4);
$b = [1,2,3,4];
----------------------------------------------------------------------------------------------------------------------------
同普通的形参混用,以及可以对整个其他的形参进行统一类型约束!
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); ?>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- Laravel5.3 表单验证中文报错提示语言包
- 10 件在 PHP 7 中不要做的事情
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 关于浮动与清除浮动,你应该知道的
- 数组reduce方法的高级技巧
- php7 读取php.ini[4]
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数