PHPで、$foo = isset($bar) ? $bar : 0; をもっと簡単にできないでしょうか。$barを2回書くのが気持ち悪いです。独自関数で function ($bar) { return isset($bar) ? $bar : 0; } みたいにやっても$barに値がセットされていなかった場合に上手くいきません。
自作関数の引数をリファレンス渡しにすれば$barに値がセットされていない場合でもうまくいきます。
function ($bar=0){return $bar;}ではだめですか?
$foo = isset($bar) ?: 0;php 5.3から三項演算子のまんなかの部分を省略できますよ
これって、isset( $bar ) == true のとき、 $foo には何が入るんですか? null じゃないんですか?
うちのバージョンが5.3.10なんだけど、$bar="test";$foo = isset($bar) ? $bar : 0;の時、$fooには「test」って文字列が入って、$foo = isset($bar) ?: 0; だと1が入るんだけど、これは省略できると言っていいんかな?結果が違うんだけど。
マニュアルには、---PHP 5.3 以降では、三項演算子のまんなかの部分をなくすこともできるようになりました。 式 expr1 ?: expr3 の結果は、expr1 が TRUE と同等の場合は expr1、 それ以外の場合は expr3 となります。---って書いてますね。php.net/manual/ja/language.operators.comparison.php
正確には $foo = $bar ?: 0 でした。すまそ
あなたが気持ち悪いかどうかは正直関係ないです。メンテナンス、保守を考えた場合、より理解しやすい記述を取るべきです。自分の書いたコードですら数ヶ月経てば他人のコードと同義です。
JavaScript なら $foo = $bar || 0 ってできるのにねー
みんなの回答 5 件
自作関数の引数をリファレンス渡しにすれば$barに値がセットされていない場合でもうまくいきます。
PHP: リファレンス渡し - Manual
http://php.net/manual/ja/language.references.pass.phpfunction ($bar=0){return $bar;}
ではだめですか?
$foo = isset($bar) ?: 0;
php 5.3から三項演算子のまんなかの部分を省略できますよ
あなたが気持ち悪いかどうかは正直関係ないです。メンテナンス、保守を考えた場合、より理解しやすい記述を取るべきです。自分の書いたコードですら数ヶ月経てば他人のコードと同義です。
JavaScript なら $foo = $bar || 0 ってできるのにねー
関連するトピックス