PHP で Fatal error: Can't use method return value in write context in ... というエラーが出る場合の対処方法

PHP

問題

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,

参考


アバター
後藤隼人 ( ごとうはやと )

Python や PHP を使ってソフトウェア開発やウェブ制作をしています。詳しくはこちら