Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]dziedziczenie klas, a konstruktor...
Forum PHP.pl > Forum > Przedszkole
-emes-
znowu mam pytanie.

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:
  1. <?php
  2. class PermissionGroup {
  3.  
  4. private $id;
  5.  
  6. private $name;
  7.  
  8. public function PermissionGroup($name) {
  9. $this->setName($name);
  10. }
  11.  
  12. protected function createPermissionGroupFromService($id, $name) {
  13. $this->StoragePlace($name);
  14. if (is_int($id))
  15. $this->id = $id;
  16. else
  17. throw new Exception('$id must be an int value');
  18. }
  19.  
  20. public function getId() {
  21. return $this->id;
  22. }
  23.  
  24. public function setName($name) {
  25. if (is_string($name))
  26. $this->name = $name;
  27. else
  28. throw new Exception('$name must be a string value');
  29. }
  30.  
  31. public function getName() {
  32. return $this->name;
  33. }
  34. }
  35. ?>
oraz dziedziczącego po niej serwisu:
  1. <?php
  2. require_once("../model/PermissionGroup.php");
  3.  
  4. class PermissionGroupService extends PermissionGroup {
  5.  
  6. public function create(PermissionGroup $permissionGroup) {
  7. ...
  8. }
  9.  
  10. }
  11. ?>
uruchamia i jaki dostaję 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

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?
-emes-
hhmmmmm
w sumie, to mógłbym sobie sam odpowiedzieć, że skoro klasa w PHP może mieć tylko jeden konstruktor, to nie może być domyślnie wywoływany ten bezargumentowy, ponieważ skoro sobie nadpisałem argumentowym, to do tamtego dostępu już niet...

czyli pytanie moje można uznać za niebyłe ;-p

ej, brakuje jeszcze obiektowości w php, brakuje... :-/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.