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 をご覧ください。