您的位置:首页 > 编程语言 > PHP开发

php7.0的新特性

2016-09-18 10:50 501 查看
今天没事,看了看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);
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 函数