1. ホーム
  2. php

[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない

2022-01-25 02:42:12

質問

次のようなコードでうまくいくはずだと思うのですが、そうではありません。 (編集: PHP 5.5+で動作するようになりました) :

if (!empty($r->getError()))

ここで getError() は単純に

public function getError()
{
    return $this->error;
}

なのに、こんなエラーが出てしまう。

can't use method return value in write context.

これはどういう意味ですか?これは単なる読み込みではないのですか?

解決方法は?

empty() は参照によって値にアクセスする必要があり (その参照が存在するものを指しているかどうかをチェックするため)、 5.5 より前の PHP では関数から返される一時的な値への参照がサポートされていませんでした。

しかし、あなたが抱えている本当の問題は、あなたが empty() というのは、quot;empty" の値が "false" と異なると誤解しているためです。

Empty は、単に !isset($thing) || !$thing . チェックするものが常に存在する (PHP では関数呼び出しの結果は常に存在する) 場合は empty() 関数は 否定演算子以外の何物でもない .

PHP は空の概念を持っていない . false と評価される値は空であり、true と評価される値は空でない。同じことなんです。このコード

$x = something();
if (empty($x)) …

とこれを

$x = something();
if (!$x) …

があります。 どのデータ型でも、どのような場合でも、常に同じ結果になります。 (なぜなら $x が定義されています。 empty() は冗長です)。

メソッドからの返り値は常に存在します(たとえあなたが return ステートメントを使用すると、返り値が存在し、その中に null ). したがって

if (!empty($r->getError()))

は論理的に等価である。

if ($r->getError())