Portál AbcLinuxu, 9. května 2025 21:15
class Common{ public function __construct(){ $this->data = 'A'; } public function getData(){ return $data; } } class SetOne extends Common{ protected $data; public function __construct(){ $this->data = 'B'; } } class SetTwo extends Common{ protected $data; public function __construct(){ $this->data .= 'C'; $obj = new SetOne(); } } class SetTree extends Common{ protected $data; public function __construct(){ $this->data .= 'D'; $obj = new SetTwo(); } } $obj = new SetTree(); echo $obj->getData(); // Požadovaný výsledek: ABCD
echo "ABCD";
$obj
jsou tři nezávislé různé proměnné, $this->data
jsou tři různé member properties (vlastnosti objektu) a máš tam tři různé instance objektů.
Doporučuju přečíst nějaký dobrý úvod do objektového programování, řekl bych, že v tom máš guláš. Popis v dokumentaci PHP je dobrý, ale předpokládá znalosti základních principů, takže ti asi pomůže až později. Zkus začít tímto (nečetl jsem to celé, ale vypadá to slibně).
public function getData(){
return $this->data;
}
public function __construct(){ parent::__construct(); ... }2. V konštruktore SetTwo a SetTree vytváraš lokálny objekt $obj, ktorý sa potom nikde nepoužije. Nájdi si na nete rozdiely medzi dedičnosťou a kompozíciou v OOP. Podľa toho potom zvoľ vhodný typ väzby medzi objektami. Keďže si napísal len abstraktný príklad, tak Ti pravdepodobne nikto nebude vedieť povedať ako by to malo byť správne. V tomto kontexte kód echo "ABCD" naozaj nie je vôbec horší než ostatné odpovede, pretože robí presne to čo si chcel.
class Parent{
protected $data; // Definujeme už v rodiči, ne v potomcích
public function __construct(){
$this->data = 'A';
}
public function getData(){
return $data;
}
}
class Child extends Parent{
public function __construct(){
parent::__construnct(); // Konstruktor rodiče potřeba volat explicitně
$this->data .= 'B';
}
}
$obj = new Child();
echo $obj->getData(); // Vypíše AB
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.