PHPの定数を条件分岐で出力させる

例えば、下記のような定数を宣言していたとします。
<?php

const PRE_HOGE = 'hogehoge';
const HOGE = 'piyopiyo';
これを、フラグを基にtrueだったらPRE_HOGEを、falseだったらHOGEを出力させたい、という感じのことをやろうとしました。 まず、愚直に考えると以下のようになるかと思います。
<?php

$flag = ture; //or false
$str = '';

if($flag) {
    $str = PRE_HOGE;
}
else {
    $str = HOGE;
}

echo $str;
……長い。1つだけであればこれでもまあ良いか、と妥協するところですが、今回はこのパターンが5個くらい(しかも全て同じプレフィックス)続いたので、もうちょっと行数を削減できないかと工夫したくなりました。 そこで、最終的に下記のようにしました。
<?php

$prefix = $flag ? 'PRE_' : ''; //三項演算子でtrueならば`PRE_`、falseならば空文字列を変数にセット

echo constant($prefix.'HOGE'); //'HOGE'という文字列の前に上でセットしたプレフィックスを繋ぎ、その文字列で宣言された定数の値をconstantで返す
すごくスッキリしました! ちなみに変数の場合は下記のような感じになるようです。
<?php

$prefix = $flag ? 'PRE_' : ''; //上と同じ

echo ${($prefix.'HOGE')};
うーん、後で忘れそうな気もしますが、すごくスッキリ書けるので採用。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。