PHP8に対応させた

作業内容

オレオレフレームワークで動いているこのコンテンツにphp8.0の新機能を反映させた。

あとphp7.4で反映し忘れていたプロパティの型(結構使った)。名前付き引数に関してはめんどくさいのでやめた。

null合体演算子について

null合体演算子の機能自体はphp7.0から存在しているが、throwが『文』から『式』になったということで合わせて導入しようとしたがwarningを握りつぶしてしまうのは怖くないかいということでメモ。

ini_set("display_errors", "1");

error_reporting(32767);



$array = [];



$result = $array["bbbb"] ?? "nothing";

var_dump($result); //string(7) "nothing"

echo"<br>";

var_dump(error_get_last()); //NULL



$result = $array["bbbb"]; //Warning: Undefined array key "bbbb" in /home/z380/internet/yossoi/webroot/index.php on line 25

var_dump(error_get_last()); //array(4) { ["type"]=> int(2) ["message"]=> string(26) "Undefined array key "bbbb"" ["file"]=> string(44) "/home/z380/internet/yossoi/webroot/index.php" ["line"]=> int(25) }

以下は公式のコード。

PHP7.0 Null 合体演算子
// $_GET['user'] を取得します。もし存在しない場合は

// 'nobody' を用います。

$username = $_GET['user'] ?? 'nobody';

// 上のコードは、次のコードと同じ意味です。

$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';

個人的にarrayから要素を取り出すときはarray_key_exists()をフックしており、isset()はほぼ使わないので不思議な感触を持った。