Uczę się PHP i znalazłem zaskakujące zachowanie, gdy próbowałem dowiedzieć się, dlaczego konstruktor nie został wywołany.Czy mogę zmusić klasę podrzędną do korzystania z konstruktora nadrzędnego?
<?php
class Shape {
function __construct() {
echo 'Shape.';
}
}
class Triangle extends Shape {
function __construct() {
echo 'Triangle';
}
}
$tri = new Triangle();
?>
Jestem przyzwyczajony do java, więc pomyślałem, że to wypisze "Kształt. Trójkąt". Zaskakująco, po prostu wychodzi "Trójkąt". Szukałem problemu i najwyraźniej mogę go trochę poprawić, umieszczając parent::__construct();
w klasie potomnej, ale to nie wydaje się idealne. Czy jest coś, co mogę zrobić dla klasy Shape, aby upewnić się, że klasy potomne zawsze wywołują konstruktor macierzysty? Czy naprawdę muszę pisać parent::__construct();
w klasie każdego dziecka, gdy rodzic ma konstruktora?
Jestem prawie pewien, że musisz, chyba że nie zdefiniujesz konstruktora potomnego. –
możliwy duplikat konstruktora [Czy Superklass działa wewnątrz konstruktora potomnego w PHP?] (Http://stackoverflow.com/questions/738571/is-superclasss-constructor-run-inside-child-constructor-in-php) – outis