1. TOPTOP
  2. Webサービス
  3. PHP

オライリーの「初めてのPHP (PHP7版) 」で null合体演算子を三項演算子に変えてみる

|

thumbnail

地元の図書館で、PHP7に対応したオライリーの初めてのPHPを借りることができたので早速、さくらクラブの初心者もくもく勉強会(新しいタブで開く)で写経してみました。

“??”ってなに?

初めてのPHPのP.136 例7-29では以下のようなコードが紹介されています。以下はクラス内でinputというメソッドが定義されている箇所の引用です。

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);  
}

この中で注目すべきは、4行目と5行目で使われている”??“という記述です。”??”はPHP7からの新機能で、null合体演算子という演算子です。

null合体演算子とは?

null合体演算子とは糖衣構文(シンタックスシュガー)の一種です。PHPの公式ドキュメント(新しいタブで開く)を引用すると、このように説明されています。

三項演算子と isset() を組み合わせるよくありがちなパターンを、より簡単に書くためのものです。 この演算子は、もし第一オペランドが非 NULLの値であればそれを返し、そうでない場合は第二オペランドを返します。

PHP5で三項演算子を使う場合

引用の通り、null合体演算子はisset()と三項演算子で書き換えすることができます。PHP5の場合は以下のような書き方になります。ちなみに自分が使っているローカル開発環境はPHP5です。このように書かざるを得ません。

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);
}

null合体演算子は「別名:二項演算子」?

ちなみにこちらのページ(新しいタブで開く)にアクセスすると、null合体演算子について、簡単な例を用いて大変分かりやすく説明されています。ただ、null合体演算子は二項演算子ともいうのでしょうか?どなたか詳しい方、ご教示いただければ幸いです。

閑話休題

sakura_programming_mokumoku20170830

上記の画像はnull合体演算子について、即興でLTをしたときの様子です。さくらインターネットさんのご好意で4Kディスプレイを使って、お話をさせていただきました。やはり解像度がハンパないです。また違った意味でLTをしたくなるほど、めちゃくちゃ鮮明でした。関係者のみなさまありがとうございました。