Autor | Zpráva | ||
---|---|---|---|
destr Profil * |
Mám tři třídy:
final class trida1 extends trida2 { neobsahuje konstruktor ani destruktor } class trida2 extends trida3 { konstruktor, destruktor, oba spouští parent:: konstruktor/destruktor } class trida3 { konstruktor, destruktor } Vytvořím objekt $trida1 = new trida1();, v tuto chvíli se žádný konstruktor nespustí, protože ho trida1 neobsahuje. Avšak po skončení skriptu se automaticky spustí rodičovský destruktor, který ale spouštět nechci a ani ho nemám v trida1 uveden. Proč tomu tak je? To je normální chování PHP? Moderátor Alphard: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
|
||
destr Profil * |
oprava: to final má být samozřejmě u trida1.
Moderátor Alphard: Snad jsem to opravil.
|
||
Majkl578 Profil |
#3 · Zasláno: 17. 3. 2010, 19:39:01
Normální chování je volat při vytvoření instance vždy (vyjma pár případů) konstruktor. Taktéž při zničení objektu destruktor.
Pokud třída konstruktor/destruktor nemá, ale její rodič jo, automaticky se volá přímo rodičovský konstruktor/destruktor. <?php class A { public function __construct() { echo 'Ac'; } public function __destruct() { echo 'Ad'; } } class B extends A { public function __construct() { parent::__construct(); echo 'Bc'; } public function __destruct() { parent::__destruct(); echo 'Bd'; } } final class C extends B { } new C(); |
||
Časová prodleva: 14 let
|
0