重複の可能性:
PHP で複数のクラスを使用してクラスを拡張できますか?
複数の子クラスを持つクラスがありますが、親の子にしたい別のクラスを追加していますが、他の子クラスの関数の多くも利用したいと考えています。
それぞれの関数を他の子クラスから親に移動することだけを考えましたが、それらを利用するのはこれら2つの子クラスだけであるため、これが本当に必要だとは思わなかったので、拡張できることを望んでいましたメインの親クラスと、既存の子クラスの 1 つから。
重複の可能性:
PHP で複数のクラスを使用してクラスを拡張できますか?
複数の子クラスを持つクラスがありますが、親の子にしたい別のクラスを追加していますが、他の子クラスの関数の多くも利用したいと考えています。
それぞれの関数を他の子クラスから親に移動することだけを考えましたが、それらを利用するのはこれら2つの子クラスだけであるため、これが本当に必要だとは思わなかったので、拡張できることを望んでいましたメインの親クラスと、既存の子クラスの 1 つから。
子クラスを拡張して、その親と子の関数の両方を継承できます。これは、あなたがやろうとしていることだと思います。
class Parent
{
protected function _doStuff();
}
class Child extends Parent
{
protected function _doChildStuff();
}
class Your_Class extends Child
{
// Access to all of Parent and all of Child's members
}
// Your_Class has access to both _doStuff() and _doChildStuff() by inheritance
@morphlesが言ったように、この機能はphp 5.4のトレイト(他の言語のミックスインなど)として利用できるようになります。ただし、本当に必要な場合は、次のような回避策を使用できます。
// your class #1
class A {
function smthA() { echo 'A'; }
}
// your class #2
class B {
function smthB() { echo 'B'; }
}
// composer class
class ComposeAB {
// list of implemented classes
private $classes = array('A', 'B');
// storage for objects of classes
private $objects = array();
// creating all objects
function __construct() {
foreach($this->classes as $className)
$this->objects[] = new $className;
}
// looking for class method in all the objects
function __call($method, $args) {
foreach($this->objects as $object) {
$callback = array($object, $method);
if(is_callable($callback))
return call_user_func_array($callback, $args);
}
}
}
$ab = new ComposeAB;
$ab->smthA();
$ab->smthB();
PHP は単一継承言語ではありません。可能であれば、php 5.4 の今後の機能を検索できます。これが traits です。
はい/いいえの答えとして、いいえと言えます。PHP では複数のクラスから拡張することはできません。代わりに使用できますinterface
。
これは逆に考えるとできますが、状況によって異なります。クラスを分けておきたい場合は、より多くの情報を提供しない限り、オブジェクトと継承をどのように構築するかについて、誰もあなたに良い答えを与えることはできません. また、クラス構造を正しくすることについて心配しすぎることは、小さなプロジェクトでは負担になることを覚えておいてください。メソッドを移動して、それで完了し、後でクラスについてさらに学習することもできます。