PHP での Fatal error: Can't use function return value in write context というエラーの原因と対処方法

今回は PHP のコードを書いていて次のエラーが出た場合の対処方法について。

Fatal error: Can't use function return value in write context

原因

このエラーが表示される最も代表的なパターンは isset()empty() に関数の戻り値を直接渡してしまっている場合のようです。 例をあげてみます。

if (isset(time())) {
  // ...
}
// => Fatal error: Can't use function return value in write context in ...

if (empty(time())) {
  // ...
}
// => Fatal error: Can't use function return value in write context in ...

isset() empty() のどちらの例でも Fatal error があげられます。

isset()empty() は一見関数のように見えますが、関数ではなく PHP という言語の一部という位置づけです。 PHP.net の該当するページには次のように説明されています。

Note: Because this is a language construct and not a function, it cannot be called using variable functions.

よって通常の関数とは異なり、 () の中には変数のみを受け付けることになっています。

ただし、 empty() については PHP 5.5 以降では変数以外も受け取れるようになっています。

if (empty(time())) {
  // ...
}
// => PHP 5.5 以降なら問題なく処理できる

対処方法

上記の原因に該当する場合は、 isset() などに関数の戻り値を直接渡すのではなく変数を介して判定する形に変更すれば OK です。

// これなら OK
$current_time = time();
if (isset($current_time)) {
  // ...
}