地元の図書館で、PHP7に対応したオライリーの初めてのPHPを借りることができたので早速、さくらクラブの初心者もくもく勉強会で写経してみました。
“??”ってなに?
初めてのPHPのP.136 例7-29では以下のようなコードが紹介されています。以下はクラス内でinputというメソッドが定義されている箇所の引用です。
[php]
public function input($type, $attributes = array(), $isMultiple = false) {
$attributes[‘type’] = $type;
if (($type == ‘radio’) || ($type == ‘checkbox’)) {
if ($this->isOptionSelected($attributes[‘name’] ?? null,
$attributes[‘value’] ?? null)) {
$attributes[‘checked’] = true;
}
return $this->tag(‘input’, $attributes, $isMultiple);
}
[/php]
この中で注目すべきは、4行目と5行目で使われている”??“という記述です。”??”はPHP7からの新機能で、null合体演算子という演算子です。
null合体演算子とは?
null合体演算子とは糖衣構文(シンタックスシュガー)の一種です。PHPの公式ドキュメントを引用すると、このように説明されています。
三項演算子と isset() を組み合わせるよくありがちなパターンを、より簡単に書くためのものです。 この演算子は、もし第一オペランドが非 NULLの値であればそれを返し、そうでない場合は第二オペランドを返します。
PHP5で三項演算子を使う場合
引用の通り、null合体演算子はisset()と三項演算子で書き換えすることができます。PHP5の場合は以下のような書き方になります。ちなみに自分が使っているローカル開発環境はPHP5です。このように書かざるを得ません。
[php]
public function input($type, $attributes = array(), $isMultiple = false) {
$attributes[‘type’] = $type;
if (($type == ‘radio’) || ($type == ‘checkbox’)) {
// 三項演算子で書き換え
if ($this->isOptionSelected(isset($attributes[‘name’]) ? $attributes[‘name’] : null,
isset($attributes[‘value’]) ? $attributes[‘value’] : null)) {
$attributes[‘checked’] = true;
}
}
return $this->tag(‘input’, $attributes, $isMultiple);
}
[/php]
null合体演算子は「別名:二項演算子」?
ちなみにこちらのページにアクセスすると、null合体演算子について、簡単な例を用いて大変分かりやすく説明されています。ただ、null合体演算子は二項演算子ともいうのでしょうか?どなたか詳しい方、ご教示いただければ幸いです。
閑話休題
上記の画像はnull合体演算子について、即興でLTをしたときの様子です。さくらインターネットさんのご好意で4Kディスプレイを使って、お話をさせていただきました。やはり解像度がハンパないです。また違った意味でLTをしたくなるほど、めちゃくちゃ鮮明でした。関係者のみなさまありがとうございました。