phpでもclassやclassの継承を使えるということで、これらを使ってプログラムを作ろうと思ったのですが、少し疑問点があったので質問させていただきます。
目標
異なるクラスをまとめて操作する。
想像しているソースコード
php
1class A{ 2 function Fa(){ 3 } 4} 5 6class B extends A{ 7 function Fa(){ 8 echo "class B, function Fa called."; 9 } 10} 11 12class C extends A{ 13 function Fa(){ 14 echo "class C, function Fa called."; 15 } 16}
これのBやCをまとめて配列に入れ、forループにてFaを呼び出す。
この先をC言語っぽく書くと、
C言語っぽいphp
1A[] $val; //変数宣言 2$val[0] = new B(); 3$val[1] = new C(); 4for($i = 0; $i < count($val); $i++){ 5 $val[0]->Fa(); 6}
(もちろん、Aという変数宣言ができないことは承知です。)
という形でループして呼び出すと思います。
実際のソースコード
それで、色々と試行錯誤していたところ、
php
1class B{ 2 function Fa(){ 3 echo "class B, function Fa called."; 4 } 5} 6 7class C{ 8 function Fa(){ 9 echo "class C, function Fa called."; 10 } 11} 12$val = []; 13$val[0] = new B(); 14$val[1] = new C(); 15for($i = 0; $i < count($val); $i++){ 16 $val[0]->Fa(); 17}
別に継承しなくても上記で動くと思います。
###質問
1. 似たようなクラスで共通の関数名があるだけの場合、継承は必要ないのでしょうか?
2. 継承なしの場合、Faが定義されていないとエラーが起きると思います。
また継承されていても、スペルミス等でFaが異なる名前で呼ばれていた場合は意図しない関数が呼ばれることになります。
これを阻止するために、関数宣言を必須化することは可能でしょうか?(継承ありstrict有りでも別にエラーは出なさそうです)
###環境
php 7.4.4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/02 13:43
2020/05/02 13:46
2020/05/02 14:19