こんにちは、webエンジニアのtakaです。
今回はEC-CUBEの開発中にオブジェクトをcloneしようとしたときに発生した__clone method called on non-objectというエラーの解決方法を記載していきたいと思います!
発生状況
以下のようにコントローラーにて$Productを$idから取得し、$Productをcloneしようとしていました。
// PHP
$Product = $app['eccube.repository.product']->find($id);
$targetProduct = clone $Product;
解決方法
結論を言うと$ProductがNULLになる場合があり、その場合に(__clone method called on non-object)エラーが出力されていました。
$idが必ず設定されるように設定したり、以下のように$ProductがNULLの場合はclone()を利用しないように、実装したい作業に合わせて対応しましょう。
// PHP
$Product = $app['eccube.repository.product']->find($id);
if ($Product) {
$targetProduct = clone $Product;
}
まとめ
答えを見ると簡単な解決策なのに意外と時間がかかったりすることってありますよね。
この記事が解決につながれば幸いです。