[ PHP ] empty 関数 ( Fatal error: Can’t use function return value in write context )

Pocket

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

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>