Ne yapıyoruz gerçekten geriye gitmektir. Kalıtım kod çoğaltılması olmadan nesneler üzerine ortak, paylaşılan işlevselliği ihsan kullanılır. Miras Parent adlı Çocuk, Ebeveyn Çocuk de yapabilirsiniz, yapabileceğiniz her şeyi gider, ancak (ebeveynin o extends işlevsellik) daha yapabilir.
class Parent {
function everyoneCanDoThis() { }
}
class Child extends Parent {
// I can implicitly use the everyoneCanDoThis() function
function onlyChildrenCanDoThis() { }
}
Bu yukarıdan aşağıya bir yapı olduğundan, Ebeveyn belirli Çocuk güvenmemelisiniz. Veli yürütmek veya Çocuk işlevlerini aramıyor. Sadece you Bir Çocuk işlevleri çağırmak, ancak bu işlevler bir Veli sınıfından kalıtsal olabilir.
Eğer her nesne bir ebeveyn sınıfta yapabilmek için istediğiniz her şeyi koymak gerekir. Belirli bir nesneye sadece alakalı belirli işlevselliği bir Çocuk gider.
Çoklu kalıtım iyi nedenler için, PHP mümkün değil solucanlar farklı bir kutu olduğunu. Başka bir yerde burada önerildiği gibi miras temellerini olsun, geri kompozisyon geliyor. :)
Kompozisyon sadece birkaç nesneleri almak ve başka bir nesneye onlara başvurular tutmak anlamına gelir. Bu nesnelerin her biri ya bir ebeveyn sınıftan miras olmayabilir ve onlar hala tek nesneleri konum gibi, miras ile ilgisi yoktur.
class ComposedObject {
private $part1 = null;
private $part2 = null;
public function __constructor() {
$this->part1 = new Part1();
$this->part2 = new Part2();
}
public function doTask() {
return $this->part1->doSomeTask();
}
public function doOtherTask() {
return $this->part2->doSomeOtherTask();
}
}
ComposedObject, herhangi bir özelliğe sahip kendisi miras veya başka değildir. Ama her bazı işlevler taşıyan iki diğer nesneleri tutar. "Parçalar" işlevselliğini doğrudan maruz kalabilirsiniz, bu yüzden $composedObject->part1->doSomeTask()
, onlar örnekteki gibi kapsüllü olabilir gibi adlandırılan konum, bu yüzden $composedObject->doTask()
gibi deniyor ve vardır dahili temsilci veya __call()
kandırmaca a> otomatik olarak "parçalar" birine oluşan nesne çağırdı görevlerimi, bazı kullanabilirsiniz. Bu olsa çoklu miras olarak aynı sorun var; iki "parça" ikisi aynı adı taşıyan bir yöntem içeriyorsa, hangisini diyorsunuz?