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
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();

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: