普通に設定
複数行必要、長い
$default_value = true;
$value = false;
$prop = $default_value;
if (isset($value)) {
$prop = $value;
}
var_dump($prop); // false
3項演算子を使う
1行で書けるものの、$value
を2回記述するのでびみょい。
$default_value = true;
$value = false;
// 3項演算子
$prop = isset($value) ? $value : $default_value;
var_dump($prop); // false
Null合体演算子(強そう)を使う
PHP5.3以上ならNull合体演算子もどきこと、?:
演算子が使えます。
真のNull合体演算子??
はPHP7までお預け。
$default_value = true;
$value = false;
// Null合体演算子
# true/falseで判定。PHP5.3以上で動作
$prop = $value ?: $default_value;
var_dump($prop); // true
# null/それ以外で判定。PHP 7.0以上で動作
$prop = $value ?? $default_value;
var_dump($prop); // false
両者の違い
演算子 | 比較条件 | 未定義変数 |
---|---|---|
?: | 真 / 偽 | エラー |
?? | not null / null | 可 |
?:は真偽を含む変数では注意が必要であったり、
未定義変数が扱えないのでisset()?...の代用としては使えません。
無いなら作ればいいじゃない
// 自作関数で何とかする
function exists(&$value, $default_value = '') {
return isset($value) ? $value : $default_value;
}
$default_value = true;
$value = false;
$props = exists($value, $default_value);
var_dump($props); // false
PHP7がメジャーになってきたら??
使えるので楽になりそうです。