Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

そろそろ「?:演算子」について一言言っておくか

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関数があればいいんじゃね?な感じです。