1

私はこの質問が何度も聞かれるのを見てきましたが、私はまだ混乱していて、似たような状態に出くわしました。これと私の文脈が同じであるかどうかはわかりませんが、これが別のシナリオであると確信している限り、そうでなければ説明を誤解している可能性があります。これが私のシナリオです。

$amount = isset($cost->getCostAmount()) ? $cost->getCostAmount() : 0;

関数costAmount()は実行時に動的に追加され、存在する場合と存在しない場合があります。したがって、最初に自分の関数が存在するかどうかを確認する必要があり、残りはかなり明確です。しかし今、この場合、私は致命的なエラーを受け取ります:

致命的なエラー:..../file.phpの書き込みコンテキストでメソッドの戻り値を使用できません

今、私がこのようなことをすると:

$amount = $cost->getCostAmount() ? $cost->getCostAmount() : 0;

明らかに、エラーが発生します。

未定義のメソッドの呼び出し:getCostAmount

関数が存在しない場合。これに対する可能な解決策は何でしょうか?説明は役に立ちます。

リクエスト:将来、質問を改善できるように、質問が却下された理由に適切なコメントを追加してください。

4

4 に答える 4

8

これを変える:

$amount = isset($cost->getCostAmount()) ? $cost->getCostAmount() : 0;

に..

$amount = method_exists($cost, 'getCostAmount') ? $cost->getCostAmount() : 0;

このコードは、存在しなくてもisset($cost->getCostAmount())メソッドを実行しているためですgetCostAmount

于 2012-08-26T11:42:41.627 に答える
4

isset関数ではなく変数を渡す必要があります。戻り値が設定されているかどうかは確認できません。

このように使うべきです、

$cost_amount = $cost->getCostAmount();
$amount = isset($cost_amount) ? $cost_amount : 0;

このコードでさえ意味がありません。ここでは$cost_amountが常に設定されるためです。getCostAmount戻り値nullまたは文字列の場合emptyは、そのように確認する必要があります。

$cost_amount = $cost->getCostAmount();
$amount = !is_null($cost_amount) ? $cost_amount : 0;

また、コードは関数を見つけられませんgetCostAmount。これがどこかで宣言されていることがわかっている場合は、それを含めてください。このメソッドが動的に生成される場合は、を使用して確認できますmethod_exists

 $amount = method_exists($cost, 'getCostAmount')? $cost->getCostAmount(): 0;
于 2012-08-26T11:47:55.367 に答える
1

isset()をfunction_exists()に変更してみてください

于 2012-08-26T11:38:12.763 に答える
0

次のように使用できます:method_existshttp://www.php.net/manual/en/function.method-exists.php):

var_dump(method_exists($cost,'getCostAmount'));
于 2012-08-26T11:44:47.990 に答える