PHP で Fatal error: Can't use method return value in write context in ... というエラーが出る場合の対処方法
問題
PHP でコードを書いていると実行時に次のようなエラーが出ることがあります。
Fatal error: Can't use method return value in write context in ...
原因と対処方法
(私の経験上)多くの場合、このエラーが出るのは empty()
に関数やメソッドの戻り値を直接渡していることが原因です。
例えば次のようなコードでこのエラーが発生します。
// 問題があるコード
$entity = new MyFavoriteEntity();
if (empty($entity->hello()) {
// ... 何らかの処理 ...
}
解決策としては、メソッドの戻り値をいったん変数に格納してから変数を empty()
に渡すようにすれば大丈夫です。
// 解決後のコード
$entity = new MyFavoriteEntity();
$message = $entity->hello();
if (empty($message)) {
// ... 何らかの処理 ...
}
どうもこれは PHP の仕様のようで、公式には次のように書かれています。
empty()
:
Note:
Prior to PHP 5.5, empty() only supports variables; anything else will result in a parse error. In other words, the following will not work: empty(trim($name)). Instead, use trim($name) == false.
意訳: PHP 5.5 よりも前のバージョンでは empty()
は変数のみを引数として受け付けます。
empty()
は isset()
等と同様「関数のように見えて関数ではない」とのことなので、取り扱いには注意が必要です。
Note: Because this is a language construct and not a function,