覚書です。
【PHP】Null合体演算子の空文字対応
??
はnullのみを検出しますが、?:
は偽値(false、0、”、null、[]など)全てを検出します。
// 三項演算子のサンプル
$age = 20;
$status = ($age >= 18) ? "成人" : "未成年";
echo $status; // 出力: 成人
// Null合体演算子のサンプル
$name = null;
$displayName = $name ?? "ゲスト";
echo $displayName; // 出力: ゲスト
$emptyString = "";
$result = $emptyString ?? "デフォルト値";
echo $result; // 出力: (空文字列)
// Null合体代入演算子のサンプル
$username = "";
$displayUsername = $username ?: "匿名ユーザー";
echo $displayUsername; // 出力: 匿名ユーザー
// 設定ページの値を使用する場合のサンプル
$options = [
'font_color' => '', // 未設定の場合
'font_size' => '24',
'font' => null
];
$text_color = $options['font_color'] ?: '#000000';
echo $text_color; // 出力: #000000
$font_size = $options['font_size'] ?: '48';
echo $font_size; // 出力: 24
$font_name = $options['font'] ?: 'default_font.ttf';
echo $font_name; // 出力: default_font.ttf
スポンサーリンク
??
と!empty()
の違い
??
(Null合体演算子)と!empty()
の違いに焦点を当てて、具体的な例を示します。
// テストのための様々な値を用意
$test_values = [
'null_value' => null,
'empty_string' => '',
'zero_string' => '0',
'zero_number' => 0,
'false_value' => false,
'valid_string' => 'center',
'undefined_key' => $undefined // 未定義の変数
];
// それぞれの値でテストしてみましょう
foreach ($test_values as $key => $value) {
echo "テストケース: {$key}\n";
echo "値: " . var_export($value, true) . "\n";
// Null合体演算子(??)の場合
$result1 = $value ?? "デフォルト値";
// !empty()の場合
$result2 = !empty($value) ? $value : "デフォルト値";
echo "??の結果: " . var_export($result1, true) . "\n";
echo "!empty()の結果: " . var_export($result2, true) . "\n";
echo "-------------------\n";
}
テストケース: null_value
値: NULL
??の結果: "デフォルト値"
!empty()の結果: "デフォルト値"
-------------------
テストケース: empty_string
値: ""
??の結果: "" // 空文字列をそのまま使用
!empty()の結果: "デフォルト値" // 空と判断
-------------------
テストケース: zero_string
値: "0"
??の結果: "0" // "0"をそのまま使用
!empty()の結果: "デフォルト値" // 空と判断
-------------------
テストケース: zero_number
値: 0
??の結果: 0 // 0をそのまま使用
!empty()の結果: "デフォルト値" // 空と判断
-------------------
テストケース: false_value
値: false
??の結果: false // falseをそのまま使用
!empty()の結果: "デフォルト値" // 空と判断
-------------------
テストケース: valid_string
値: "center"
??の結果: "center" // 有効な値
!empty()の結果: "center" // 有効な値
-------------------
テストケース: undefined_key
値: NULL
??の結果: "デフォルト値"
!empty()の結果: "デフォルト値"
-------------------
ご参考になれば幸いです。
コメント