今天没事,看了看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);
?>