PHPで問題が発生しているのは、タイトルに例外の言及がスローされ続けるためです。次の行で失敗します。
$item->getDescription();
エラーの意味を理解しています($item
null)。ただし、$itemはnullではありません。
シナリオは次のとおりです。これは、サプライヤからストアに製品を同期するスクリプトです。そのために、独自のクラス(SimpleProduct)を作成しました。このクラスにはgetDescription()関数があります。
問題は、私が受け取っているデータには、まだ入力されていないアイテムなど、多くのゴミが含まれている傾向があることです。スクリプトはこれらの項目をスキップし、残りの製品を繰り返し処理する必要があります。この致命的なエラーにより、スクリプト全体が強制終了されます。
私はこれを防ぐためにすでにセーフガードを実装しようとしましたが、それでも常に発生します。現在のコードは次のとおりです(現在のケースに関連していないため、一部のスニペットは削除されています)。
//This is part of a class that performs the sync
public function syncProduct($item) {
if(empty($item)) { return "Not a product"; }
else { var_dump($item) }
$foo = $item->getDescription();
}
var_dumpの結果を確認すると、いくつかの値が入力されたオブジェクトが表示されます。正しいタイプ(SimpleProduct)であり、空/ nullではないため、このエラーは発生しなくなると思われますが、それでも発生します。
また、これがポップアップする前に、いくつかの製品同期がエラーなしですでに発生していることに注意してください。したがって、コードが有効であることがわかります。どういうわけか、この特定のケースは私のヌルチェックをすり抜けます。
nullチェックに問題がありますか?問題のオブジェクトが存在する場合、非オブジェクトのエラーをどのようにスローできますか?