PHPでNoticeエラーをスッキリ短いコードで回避する方法

実運用においては、Noticeエラーを表示しないような設定をphp.iniに定義したり、アプリケーション側で設定したりして、比較的「見て見ぬふり」というのがPHP開発の文化になりつつありそうですが。

PHP5.6でのNotice回避コード

//bad: 存在しない変数を出力する場合
echo $hoge;

//good: 三項演算子でスッキリ(エルビス演算子・三項演算子)
echo (isset($hoge)) ? $hoge  : "";

//good: エルビス演算子でスッキリ
echo @$hoge ?: "";

みんなやりがち、存在しない値に対しての条件分岐

//bad: いろんな局面で未だに多いこのコード
if ( $_POST["hoge"] == "adan" ) { }

//good: issetの戻り値はbool値じゃないの・・・と思いますが
if ( isset($_POST["hoge"]) == "adan" ) { } 

三項演算子とは
コードを見ると理解しやすいと思います
if( $hoge ){ echo $hoge; }else{ echo ""; }

このコードを三項演算子で書くと

echo (isset($hoge)) ? $hoge  : "";

こうなります。
上は条件分岐(IF文)で、下は三項演算子(式)です。

エルビス演算子とは
echo @$hoge ?: "";

「@$hoge」がtrueの場合その値が返却される
「@$hoge」falseの場合「?: 」の右側が評価され、返却される
※空の値もfalseなので結果なにも返却されず表示されない
※アットマークは、エラー演算子ですべてのエラーを表示しない

PHP7でのNotice回避コード(二項演算子)

はてなが2つ(はてなはてな)

$hoge = "エンジニア募集!";
echo $hoge ?? "フリーランス募集!"; //結果: エンジニア募集!
 
$hoge = null;
echo $hoge ?? "フリーランス募集!"; //結果: フリーランス募集!
 
echo $adan ?? "フリーランス募集!"; //結果: フリーランス募集!

php5.6でやってしまうと「warnnig」エラーが出るので注意ですが、
処理が短く書けるので、非常にスッキリとしたコードになること間違いないですね。
積極的に使っていきましょう♪

そもそもNoticeとは

PHPにおいては実際にはエラーではなく「注意」です。
定義していない変数や配列をいきなり使おうとすると「お作法に反してますよ!」と注意が来ます。
多言語においてはエラーで処理が進まないケースもありますが、
PHPは動いちゃいます。


プロに聞いてみる
株式会社adanはエンジニアのキャリアに真剣に向き合っています。
企業の情報エンジニアとしてのキャリアアップの方法、現在の待遇(給料・報酬)未経験からのステップアップ方法などのご相談を受け付けています。
お気軽にお問合せください。