PHP 7.3 がやってきた

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 という例外が新しく追加されました。
今まで ParseErrorError を継承していましたが、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 をご覧ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です