そろそろ「?:演算子」について一言言っておくか
PHP5.3から導入される新しい演算子「?:」の説明に、
<?php $user_id = $_GET['user_id'] ?: "anonymous";
とかよくあります。PHP5.2までは
<?php $user_id = isset($_GET['user_id']) ? $_GET['user_id'] : "anonymous";
のように「$_GET['user_id']」を2回書いていた部分なので、簡単に書けるのがウリです。
が、これってあくまで
error_reporting = E_ALL & ~E_NOTICE
な環境であれば、の話じゃないですかね?
「PHPでどういったコードを書きたいか」、つまり「楽に書きたい」とか「スクリプト言語だけどカッチリ書きたい」といった考えとかポリシーに依るものが大きいと思いますが、個人的にはこのerror_reportingの設定はあり得ないと思っていて、少なくとも
error_reporting = E_ALL|E_STRICT
でWarningやNoticeなどが出ないコードじゃないとダメだと思っています。
かといって、
<?php $user_id = isset($_GET['user_id']) ?: "anonymous";
と書いても期待した動作にはならないので、結局従来の書き方をするしかない。
で、結果的に「?:」をこういう場面で使うことはないんじゃないかと思っています。
追記(2008/08/07 17:57)
id:koyhogeさんが関数/メソッドのオプションを柔軟に受け渡す - Blog::koyhoge::Techで触れているarray_val関数があればいいんじゃね?な感じです。