PHP7.2 から早1年、今年も新しい PHP がやってきました。
Heredoc と Nowdoc がより柔軟に
終端ID がインデントできるようになりました。
終端ID のインデント位置が内容の行頭になるようです。
たとえば以下の例では中の文章「ヒアドキュメント」は出力時にインデントされることなく表示できます。
function heredoc() {
return <<<EOT
ヒアドキュメント
EOT;
}
function nowdoc() {
return <<<'EOT'
ナウドキュメント
EOT;
}
配列の分割代入が参照渡しをサポート
$array = [1, 2, 3]; [&$a, $b, $c] = $array; $array[0] = 100; echo $a; // 100
list() でも同じように使えるみたいです。
$array = [1, 2, 3]; list(&$a, $b, $c) = $array; $array[0] = 100; echo $a; // 100
instanceof にリテラルが使用可能に
使い道がよくわかりませんが常に false を返すようです。
class Test {}
var_dump('aiueo' instanceof Test); // false
var_dump(12345 instanceof Test); // false
コンパイルエラーの一部が CompileError 例外に
Error を継承する CompileError という例外が新しく追加されました。
今まで ParseError は Error を継承していましたが、PHP7.3 からは CompileError を継承するように変更されました。
一部のコンパイルエラーは致命的なエラーではなく CompileError を投げるようになっています。
関数呼び出し時の引数がコンマで終了できるように
function test($a, $b, $c) {
return;
}
test(
'aaaaaaaaaaaaaaaa',
'bbbbbbbbbbbbbbbb',
'cccccccccccccccc', // 4つ目の引数はないけどコンマがあっても大丈夫
);
Argon2id をサポート
新しい鍵導出アルゴリズム Argon2id がサポートされました。
PHP7.2 までは Argon2i がサポートされていましたが、それがさらに良くなったバージョンのようです。
定数 PASSWORD_ARGON2ID で使用できます。
$hash = password_hash( 'password', PASSWORD_ARGON2ID ); var_dump ( password_verify( 'password', $hash ) ); // true
array_key_first() と array_key_last()
それぞれ配列の最初のキーと最後のキーを取得できる関数です。
配列が空の場合は NULL を返します。
$array = [ 'apple' => 'red', 'lemon' => 'yellow', 'melon' => 'green', ]; echo array_key_first( $array ) . PHP_EOL; // apple echo array_key_last( $array ) . PHP_EOL; // melon
hrtime( bool $get_as_number = FALSE )
任意の時点からの経過時間を high resolution time で取得するとのこと。
$get_as_number が FALSE の場合は [秒部分, ナノ秒部分] の形式の配列、TRUE の場合はナノ秒が返されるみたいです。
var_dump(hrtime()); var_dump(hrtime(true));
array(2) {
[0]=>
int(59940)
[1]=>
int(888148984)
}
int(59940888221744)
is_countable( mixed $var )
$var が配列または Countable を実装したオブジェクトの場合に TRUE を返すようです。
setcookie()
シグネチャが増えました。
bool setcookie ( string $name [, string $value = "" [, array $options = [] ]] )
setcookie() 自体は前からありましたが、引数が指定しやすくなっているようです。
session_set_cookie_params()
こちらも setcookie() と同じで使いやすくなったみたいです。
bool session_set_cookie_params ( array $options )
JSON_THROW_ON_ERROR
json_decode() や json_encode() で JSON_THROW_ON_ERROR が指定できるようになりました。
今まではエラーかどうかの判定に json_last_error() を使う必要がありましたが、JSON_THROW_ON_ERROR を指定することでエラー時に JsonException がスローされるそうです。
おわり
僕が理解できるとこだけピックアップしてます。
さらに詳細を知りたい方は Migrating from PHP 7.2.x to PHP 7.3.x をご覧ください。