コメントありがとうございます。 残念ながら、もうSlingboxを使っていないた…
phpでもJavaScriptのオプショナルチェーン演算子風な書き方ができた
JavaScriptを書いていると、オプショナルチェーン演算子にかなり助けられます。
const adventurer = {
name: "Alice",
cat: {
name: "Dinah",
},
};
const dogName = adventurer.dog?.name;
console.log(dogName);
// 予想される結果: undefined
存在しないプロパティにアクセスしてもエラーにならず、undefined を返してくれる便利な書き方です。
一度慣れると、もう手放せません。
PHPを書いた瞬間に起きるストレス
ところがPHPに戻ると、同じことをしようとして毎回こうなります。
if ($repository !== null) {
$user = $repository->getUser(5);
if ($user !== null) {
$result = $user->name;
}
}
「長い。」
やりたいのは nullチェック だけなのに、コードの大半が防御処理になります。
JavaScriptの ?. が恋しくなる瞬間です。
配列なら Null 合体演算子
PHPでは配列の場合、比較的シンプルに書けます。
$dogName = $adventurer['dog']['name'] ?? null;
?? を使えば、値が存在しない場合でもエラーになりません。
ただしこれは 配列限定。
オブジェクトになると事情が変わります。
配列の場合、Null合体演算子を使う
$dogName = $adventurer['dog']['name'] ?? null;
PHP8から使える「nullsafe演算子」
PHP8.0以降なら、実はJavaScriptにかなり近い書き方ができます。
$result = $repository?->getUser(5)?->name;
途中で null が出た時点で処理を止め、結果を null にしてくれます。
つまり、次の冗長なコードと同じ意味になります。
if (is_null($repository)) {
$result = null;
} else {
$user = $repository->getUser(5);
if (is_null($user)) {
$result = null;
} else {
$result = $user->name;
}
}
JavaScript脳の人ほど嬉しい
この書き方の良いところは、
「存在チェックを書く」という意識が消えること。
処理の本質だけに集中できます。
JavaScriptとPHPを行き来する人ほど、コードの認知負荷が下がるはずです。
地味だけどコード品質が上がる
nullsafe演算子を使うと、
・ネストが減る
・可読性が上がる
・バグポイントが減る
という副作用があります。
機能としては小さいですが、日常的なコードではかなり効きます。
まとめ
JavaScriptのオプショナルチェーンに慣れているなら、PHP8以降では同じ感覚で書けます。
配列 → ??
オブジェクト → ?->
PHPもだいぶ現代的になってきました。
検索

コメントを残す