【簡単解説】システムエンジニア&プログラマー&心理カウンセラー

【EC-CUBEカスタマイズ】phpエラー編「Declaration of…should be compatible with」

※この記事は上級者向きの記事です。

phpエラー編「Warningエラー出現、どういうこと?」
ということで、あるカスタマイズ中に出たWarningエラーを調査して直したという話です。

 

エラーの内容は、

WarningWarning: Declaration of Eccube\Repository\DummyRepository::save(Eccube\Entity\Product $product, Eccube\Entity\Dummy $Dummy) should be compatible with Eccube\Repository\AbstractRepository::save($entity)

※情報が古い場合もございます。
 ご利用される場合は必ず動作確認の上でお願いします。

 

 

1.エラーの内容

今回のカスタマイズ、ざっくりと説明しますと、
Dummyテーブルを追加して、Repositoryを作成し、
そのテーブルに対しての追加をsave関数を使って行いました。

その際に、save側でProductを利用したかったので、
引数に追加したところ、
(という流れでエラーが出たというのがわからず、
 調査にすごい時間がかかってしまった)
Warningエラーが出始めたようです。

Warning: Declaration of Eccube\Repository\DummyRepository::save(Eccube\Entity\Product $product, Eccube\Entity\Dummy $Dummy) should be compatible with Eccube\Repository\AbstractRepository::save($entity)

 

2.なぜエラー?

クラスにextendsしているAbstractRepositoryにsave($entity)が定義されており、
今回のDummyもそれに合わせて定義しなければいけないのですが、
Productのentityを追加したことで引数が一つ増えてしまい怒られてしまったようです。
(ざっくりですみません)

 

3.対応方法

すごい調査対応に時間がかかってしまいましたが、
私が行った対応はDummyRepositoryの関数saveを
関数名を変更してsaveWithProduct(なんでもよい)に変えただけ。

PHPpublic function save(Dummy $Dummy, Product $Product = null)

↓↓↓

PHPpublic function saveWithProduct(Dummy $Dummy, Product $Product = null)

もしくはsaveを利用するのであれば追加したentity(上記サンプルはProduct)を外す、
でも可能なはずです。

あまり起こることのないエラーだと思いますが、備忘録として公開します。

 
phpエラー編のまとめ

Warningエラーは
動作に支障はあまりありませんが
チェックして直しておきましょう。

 
お役に立てれば幸いです。

関連記事