PHP7.2常用新特性和函数

骑驴找蚂蚁🐜 · 2019-05-08

通过这篇你将了解PHP 7.2版本中添加的一些新特性和函数。

PHP 7.2是一个LTS版本,他提供了一些新功能和几个较小的核心改进。开箱即用的PHP 7.2为我们提供了新的哈希,类型提示,类型扩展和显着的性能。你以可以查看官方文档来获取更详细的内容。

这就是PHP 7.2为我们提供的新功能特性:

  1. 新的对象类型(object)
  2. 允许重写抽象方法
  3. 使用Argon2算法生成密码散列
  4. 参数类型推导
  5. 允许分组命名空间的尾部逗号

新的对象类型

这种新的对象类型object引进了可用于逆变(contravariant)参数输入和协变(covariant)返回任何对象类型。

<?php

class Test
{
    public function echo()
    {
        echo "Hello word";
    }
}

function testObject(object $object): object
{
    return $object;
}

testObject(new Test)->echo();

允许重写抽象方法

当一个抽象类继承于另外一个抽象类的时候,继承后的抽象类可以重写被继承的抽象类的抽象方法。

<?php

abstract class A
{
    abstract function test(string $s);
}
abstract class B extends A
{
    // overridden - still maintaining contravariance for parameters and covariance for return
    abstract function test($s) : int;
}

使用Argon2算法生成密码散列

Argon2是一个导入到PHP 7.2的新哈希,Argon2是一个密钥派生函数,被选为2015年7月密码哈希竞赛的获胜者。

我们通过password_开头的函数使用它。以下是暴露出来的常量:

  • PASSWORD_ARGON2I
  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
  • PASSWORD_ARGON2_DEFAULT_TIME_COST
  • PASSWORD_ARGON2_DEFAULT_THREADS
<?php

password_hash('password', PASSWORD_ARGON2I);

// or 

$options = ['memory_cost' => 1<<11, 'time_cost' => 4, 'threads' => 2];
password_hash('password', PASSWORD_ARGON2I, $options);

参数类型推导

允许我们省略类型提示。因此,您可以覆盖它或其他任何东西。这不会再导致错误,这是一个很好的功能,便于编码,当涉及到覆盖时,您不必限制自己的特定类型提示。

<?php

interface A
{
    public function Test(array $input);
}

class B implements A
{
    public function Test($input){} // type omitted for $input
}

允许分组命名空间的尾部逗号

命名空间可以在PHP 7中使用尾随逗号进行分组引入。

<?php
use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};

在7.2之前它是一个错误的语法。

废弃的内容

  1. __autoload()

    请使用spl_autoload_register() 来代替__autoload()。

  2. create_function()

    请使用更好匿名函数

  3. parse_str()

    不再需要第二个参数.

  4. each()

    使用foreach 来代替

  5. assert()

    将不再接收字符串参数, 最好提供 bool 的表达式。

查看更多的废弃功能请查看RFC

上面已经介绍重要的一些PHP7.2更新功能。如果你需要升级迁移你可以查看官方文档
,查看PHP7, PHP7.1的更新特性。