otóż wyczytałem gdzieś kiedyś, że w php5 konstruktor klasy nie podlega dziedziczeniu. bardzo mnie to ucieszyło nieukrywam (bo po co niby by miał dziedziczyć), tymbardziej że przyzwyczajony jestem do javy, ale...
piszę sobie prosty kod klasy PermissionGroup:
oraz dziedziczącego po niej serwisu:
<?php class PermissionGroup { private $id; private $name; public function PermissionGroup($name) { $this->setName($name); } protected function createPermissionGroupFromService($id, $name) { $this->StoragePlace($name); $this->id = $id; else throw new Exception('$id must be an int value'); } public function getId() { return $this->id; } public function setName($name) { $this->name = $name; else throw new Exception('$name must be a string value'); } public function getName() { return $this->name; } } ?>
uruchamia i jaki dostaję komunikat??
<?php require_once("../model/PermissionGroup.php"); class PermissionGroupService extends PermissionGroup { public function create(PermissionGroup $permissionGroup) { ... } } ?>
Kod
Warning: Missing argument 1 for PermissionGroup::PermissionGroup(), called in /var/www/IBDP/test/service.php on line 4 and defined in /var/www/IBDP/model/PermissionGroup.php on line 7
Fatal error: Uncaught exception 'Exception' with message '$name must be a string value' in /var/www/IBDP/model/PermissionGroup.php:27 Stack trace: #0 /var/www/IBDP/model/PermissionGroup.php(8): PermissionGroup->setName(NULL) #1 /var/www/IBDP/test/service.php(4): PermissionGroup->PermissionGroup() #2 {main} thrown in /var/www/IBDP/model/PermissionGroup.php on line 27
Fatal error: Uncaught exception 'Exception' with message '$name must be a string value' in /var/www/IBDP/model/PermissionGroup.php:27 Stack trace: #0 /var/www/IBDP/model/PermissionGroup.php(8): PermissionGroup->setName(NULL) #1 /var/www/IBDP/test/service.php(4): PermissionGroup->PermissionGroup() #2 {main} thrown in /var/www/IBDP/model/PermissionGroup.php on line 27
no i w tym momencie - domyślny konstruktor od stringa sprawia wrażenie, jakby jednak miał być wywołany automagicznie...
w końcu rzuca mi wyjatek ktory sam wymuszam, wlasnie dla domyslnego konstruktora...
w takim bądź razie - robię mały test. usuwam ustawienie pola z konstruktora nadklasy - zostaję mi już tylko pierwszy komunikat
Kod
Warning: Missing argument 1 for PermissionGroup::PermissionGroup(), called in /var/www/IBDP/test/service.php on line 4 and defined in /var/www/IBDP/model/PermissionGroup.php on line 7
czas na wnioski?
czy konstruktor nadklasy jednak jest samoistnie wywoływawy...?
co nie ukrywam psuje mi mocno schemat modelu...
pytanie jeszcze jedno. w javie towrzę sobie trzy konstruktory, jeden do modelu, drugi do serwisów, trzeci do testów i jest ok. w php jakoś mi się to wszystko dziwnie zachowuje gdy mam dwie metody o tej samej nazwie...
mam rozumieć, że trzy konstruktory to w php nie bardzo?