PHP7.2.0

11月30日にPHP7.2.0がリリースとなりました!

今日は7.2.0で追加された、いくつかの新機能に注目したいと思います!

[http://php.net/manual/ja/migration72.php:title]

object 型の追加

新たに object型 が追加されました。

そして、型宣言 / 返り値の型 に指定することが出来るようになりました。

サンプルコード


<?php

function test(object $obj) : object
{
    return new SplQueue();
}

test(new StdClass());

abstractメソッドのオーバーライドが可能に

abstractメソッドのオーバーライドが可能になりました。

<?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」が選択できるようになりました。

[https://ja.wikipedia.org/wiki/Argon2:title]

password_ 系の関数で使用可能。

  • PASSWORD_ARGON2I
  • PASSWORD_ARGON2_DEFAULT_MEMORY_COST
  • PASSWORD_ARGON2_DEFAULT_TIME_COST
  • PASSWORD_ARGON2_DEFAULT_THREADS

型宣言の省略

継承したメソッドの型宣言を省略できるようになりました。

<?php

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

class B implements A
{
    public function Test($input){} // 型宣言の省力が可能
}

名前空間のuse宣言でカンマが使用可能に

PHP7.0で追加されたuse宣言をまとめて行える機能に、

「Trailing Comma」、つまり「最後に余分なコンマを打っても動く」ようになりました。

<?php

use Foo\Bar\{
    Foo,
    Bar,
    Baz,
};

number_format()に負数を渡した時の挙動の変化

number_format()に負数を与えた場合の挙動が変化しました。

例えば「-0.01」の負数の少数値を渡した時、以前なら「-0」が返されたが、

PHP7.2からは「0」が返されるようになりました。

<?php

echo number_format(-0.01); // 0 が返されるようになった

配列からオブジェクトへのキャスト後で数値のキーにアクセス可能に

配列をオブジェクトにキャストした後、

数値キーに対してアクセス出来るようになりました。

以前は文字列のキーのみアクセス可能でした。

<?php

// array to object
$arr = [0 => 1];
$obj = (object)$arr;
var_dump(
    $obj,
    $obj->{'0'}, // アクセス出来るようになった
    $obj->{0} // アクセス出来るようになった
);

count()できない場合WARNINGを吐く

count()にカウント出来ない型を渡すとWARNINGが吐かれるようになった。

count(1);  // WARNING
count("apple");  // WARNING
count([1, 2]);  // 2

今回調べたのは以上となります!

正直、PHP7.0やPHP7.1の時ほどの驚きは少ないですね。

PHP7.1から10%速度改善しているそうですが、いかほどのものか。

個人的にはプロパティの型宣言が出来るようになって欲しい!!