简述PHP7.2 新特性和废弃的功能

表示声明该函数返回值为string类型

declare(strict_types=1); 

strict_types的值为1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。

可以使用的类型参数有:

  • int

  • float

  • bool

  • string

  • interfaces

  • array

  • callable

    void  //要么去掉 return 语句,要么返回空return(即return ;),即使返回NULL也不行。

        public function getConnection(): string

        /**
         * 获取当前模型的数据库查询对象
         * @access public
         * @param array $scope 设置不使用的全局查询范围
         * @return Query
         */
        public function db($scope = []): Query
        {


    PHP 7.2为我们提供了新的哈希,类型提示,类型扩展和显着的性能。你以可以查看官方文档来获取更详细的内容。

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

    新的对象类型(object)

    允许重写抽象方法

    使用Argon2算法生成密码散列

    参数类型推导

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

    新的对象类型

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

    class Test

    {

    public function echo()

    {

    echo "Hello word";

    }

    }

    function testObject(object $object): object

    {

    return $object;

    }

    testObject(new Test)->echo();

    允许重写抽象方法

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

    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

    password_hash('password', PASSWORD_ARGON2I);

    // or

    $options = ['memory_cost' => 1<<11, 'time_cost' => 4, 'threads' => 2];

    password_hash('password', PASSWORD_ARGON2I, $options);

    参数类型推导

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

    interface A

    {

    public function Test(array $input);

    }

    class B implements A

    {

    public function Test($input){} // type omitted for $input

    }

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

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

    use Foo\Bar\{

    Foo,

    Bar,

    Baz,

    };

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

    废弃的内容

    __autoload()

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

    create_function()

    请使用更好匿名函数。

    parse_str()

    不再需要第二个参数.

    each()

    使用foreach 来代替

    assert()

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