主页»PHP»PHP 7 的几个新特性

PHP 7 的几个新特性

来历:0x1.im 发布时刻:2015-10-23 阅览次数:

  1. ?? 运算符(NULL 兼并运算符)

  把这个放在第一个说是由于我觉得它很有用。用法:

$a = $_GET['a'] ?? 1;

  它相当于:

<?php
$a = isset($_GET['a']) ? $_GET['a'] : 1;

  咱们知道三元运算符是能够这样用的:

$a ?: 1

  可是这是建立在 $a 现已界说了的前提上。新增的 ?? 运算符能够简化判别。

  2. 函数回来值类型声明

  官方文档供给的比如(留心 ... 的边长参数语法在 PHP 5.6 以上的版别中才有):

<?php
function arraysSum(array ...$arrays): array
{
    return array_map(function(array $array): int {
        return array_sum($array);
    }, $arrays);
}

print_r(arraysSum([1,2,3], [4,5,6], [7,8,9]));

  从这个比如中能够看出现在函数(包含匿名函数)都能够指定回来值的类型。

  这种声明的写法有些相似于 swift:

func sayHello(personName: String) -> String {
    let greeting = "Hello, " + personName + "!"
    return greeting
}

  这个特性能够协助咱们防止一些 PHP 的隐式类型转化带来的问题。在界说一个函数之前就想好预期的成果能够防止一些不必要的过错。

  不过这儿也有一个特色需求留心。PHP 7 增加了一个 declare 指令:strict_types,既运用严厉形式。

  运用回来值类型声明时,假如没有声明为严厉形式,假如回来值不是预期的类型,PHP 仍是会对其进行强制类型转化。可是假如是严厉形式, 则会动身一个 TypeError 的 Fatal error。

  强制形式:

<?php
function foo($a) : int
{
    return $a;
}

foo(1.0);

  以上代码能够正常履行,foo 函数回来 int 1,没有任何过错。

  严厉形式:

<?php
declare(strict_types=1);

function foo($a) : int
{
    return $a;
}

foo(1.0);
# PHP Fatal error:  Uncaught TypeError: Return value of foo() must be of the type integer, float returned in test.php:6

  在声明之后,就会触发丧命过错。

  是不是有点相似与 js 的 strict mode?

  3. 标量类型声明

  PHP 7 中的函数的形参类型声明能够是标量了。在 PHP 5 中只能是类名、接口、array 或许 callable (PHP 5.4,即能够是函数,包含匿名函数),现在也能够运用 string、int、float和 bool 了。

  官方示例:

<?php
// Coercive mode
function sumOfInts(int ...$ints)
{
    return array_sum($ints);
}

var_dump(sumOfInts(2, '3', 4.1));

  需求留心的是上文说到的严厉形式的问题在这儿相同适用:强制形式(默许,既强制类型转化)下仍是会对不符合预期的参数进行强制类型转化,严厉形式下则触发 TypeError 的丧命过错。

  4. use 批量声明

  PHP 7 中 use 能够在一句话中声明多个类或函数或 const 了:

<?php
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

  但仍是要写出每个类或函数或 const 的称号(并没有像 python 相同的 from some import * 的办法)。

  需求留心的问题是:假如你运用的是依据 composer 和 PSR-4 的结构,这种写法是否能成功的加载类文件?其实是能够的,composer 注册的主动加载办法是在类被调用的时分依据类的命名空间去查找方位,这种写法对其没有影响。

  5. 其他的特性

  其他的一些特性我就不逐个介绍了,有爱好能够检查官方文档:

  http://php.net/manual/en/migration70.new-features.php

  简要说几个:

  • PHP 5.3 开端有了匿名函数,现在又有了匿名类了;
  • define 现在能够界说常量数组;
  • 闭包( Closure)增加了一个 call 办法;
  • 生成器(或许叫迭代器更适宜)能够有一个终究回来值(return),也能够经过 yield from 的新语法进入一个别的一个生成器中(生成器托付)。

  生成器的两个新特性(return 和 yield from)能够组合。详细的表象咱们能够自行测验。PHP 7 现在现已到 RC5 了,终究的版别应该会很快到来。

QQ群:凯发娱乐官网官方群(515171538),验证音讯:10000
微信群:加小编微信 849023636 邀请您参加,验证音讯:10000
提示:更多精彩内容重视微信大众号:全栈开发者中心(fsder-com)
PHP
网友谈论(共1条谈论) 正在载入谈论......
沉着谈论文明上网,回绝歹意咒骂 宣布谈论 / 共1条谈论
登录会员中心