動作しそうで動作しないコードの紹介です。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; (変数が宣言されているが、値が設定されていない)