LoginSignup
2

More than 5 years have passed since last update.

ソースコードを読んでいると、三項演算子を短くしたものが出てきた

Posted at

ソースコードを読んでいると、以下のようなコードにぶち当たりました。

    public function read()
    {
        if ($this->_user !== null) {
            return $this->_user ?: null;
        }

        $this->_user = $this->_session->read($this->_config['key']) ?: false;

        return $this->_user ?: null;
    }

"?: "   これってなんでしょう?
どうやら、三項演算子の、真の場合に評価する式が存在しないもののようです。
つまり、

$this->_user ?: null;

の場合、"$this->_user"が存在しない場合は、nullを返すようです。
では、存在した場合は何を返すかというと、このコード見ていると、何も返さないように見えないですね。
"$this->_user"の内容を返すように見えます。
では、実験して見ます。
実行環境は、環境用意するのがめんどいので、以下の環境を使いました。

では、以下のようなソースコードを書いて見ます。

<?php
// Here your code !

$flag = "hello";

echo $flag ?: "false";

$falseflag = false;

echo $falseflag ?: "false"

?>

実行結果は以下のようになります。

hellofalse

つまり、

echo $flag ?: "falseです";

は、\$flagがfalse,0,"",nullの時は、"falseです"の結果を表示し、それ以外の\$flagに何か入っている時は、\$flagの内容を表示するようです。
三項演算子の変形パターンとして覚えていただければ幸いです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2