動作しそうで動作しないコードの紹介です。empty 関数で発生する PHP エラー [ Fatal error: Can’t use function return value in write context ] の発生原因と対応方法を掲載しています。
スポンサーリンク
trim 関数と empty 関数のコラボ
下記のコードは問題なく動作しそうですが、Fatal error が発生します。
$str = ' あいうえお ';
// trim 関数の結果を直接 empty 関数に与える
if(empty(trim($str))) {
echo '空文字列です。';
} else {
echo '空文字列ではありません。';
}
// 以下のFatal error が発生する
//--------------------------------------------------------------------------
// Fatal error: Can't use function return value in write context in ・・・
trim 関数の結果を一旦、変数に格納することで上記の Fatal error を回避することができます。
$str = ' あいうえお ';
// 一旦、変数に格納する
$str = trim($str);
if(empty($str)) {
echo '空文字列です。';
} else {
echo '空文字列ではありません。';
}
追記:PHP 5.5 以降、empty 関数は変数以外もサポートするようです。
PHP 5.5 より前のバージョンでは、empty() がサポートするのは変数だけです。それ以外の値をチェックするとパースエラーになります。つまり、empty(trim($name)) は動作しません。かわりに trim($name) == false を使います。
empty 関数が False と判定するパターン
以下のサンプルコードは期待通りの動作とはなりません。注意が必要です。
$str = ' 0 ';
$str = trim($str);
if(empty($str)) {
echo '空文字列です。';
} else {
echo '空文字列ではありません。';
}
// 出力
//------------------------------------------
// 空文字列です。
empty 関数は、以下のケースで False と判定します。
- “”(空文字列)
- 0 (整数 の 0)
- 0.0 (浮動小数点数の 0)
- “0” (文字列 の 0)
- NULL
- FALSE
- array() (空の配列)
- $var; (変数が宣言されているが、値が設定されていない)