PHPで、$foo = isset($bar) ? $bar : 0; をもっと簡単にできないでしょうか。$barを2回書くのが気持ち悪いです。独自関数で function ($bar) { return isset($bar) ? $bar : 0; } みたいにやっても$barに値がセットされていなかった場合に上手くいきません。

みんなの回答 5 件

名無しさんの回答

自作関数の引数をリファレンス渡しにすれば$barに値がセットされていない場合でもうまくいきます。

PHP: リファレンス渡し - Manual

http://php.net/manual/ja/language.references.pass.php
名無しさんの回答

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 ってできるのにねー

最終更新日:2012-09-23 (4,324 views)

関連するトピックス

ページ上部に戻る