Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dziedziczenie OOP PHP4 w PHP5
Forum PHP.pl > Forum > PHP > Object-oriented programming
kreator
Witam.
Mam taki problem. Mam klasę napisaną w PHP4 - konstruktor ma taką samą nazwę jak klasa.
Jeżeli chcę dziedziczyć konstruktor z klasy napisanej w PHP4 do klasy napisanej w PHP5, to w jaki sposób to zrobić?

parent::__construct();

czy parent::nazwa_klasy();

Mam nadzieję że w miarę jasno napisałem smile.gif
starach
Nie do końca jestem pewien że o to ci chodzi...
Ale możesz sprawdzać czy metoda danego obiektu istnieje: http://pl.php.net/method_exists
dr_bonzo
?
  1. <?php
  2.  
  3. class Klass_V4
  4. {
  5. function Klass_V4($txt)
  6. {
  7. echo "TXT = " . $txt . "<br />";
  8. }
  9. }
  10.  
  11. class Klass_V5_z_konstruktorem extends Klass_V4
  12. {
  13. public function __construct($txt)
  14. {
  15. parent::__construct($txt);// i wszystko jasne
  16. }
  17. }
  18.  
  19. class Klass_V5_bez_konstruktora extends Klass_V4
  20. {
  21. // wywolany zostanie konstruktor klasy bazowej
  22. }
  23.  
  24.  
  25. new Klass_V5_bez_konstruktora("BEZ konstruktora");
  26. new Klass_V5_z_konstruktorem( "Z konstruktorem");
  27. ?>


wynik
Kod
TXT = BEZ konstruktora
TXT = Z konstruktorem
mike
Cytat(kreator @ 18.08.2008, 23:02:46 ) *
Jeżeli chcę dziedziczyć konstruktor z klasy napisanej w PHP4 do klasy napisanej w PHP5, to w jaki sposób to zrobić?

parent::__construct();

czy parent::nazwa_klasy();
Brak samodzielności ludzi mnie przeraża. A jakby odpowiedź nie padła kilka dni to siedziałbyś i czekał? Takie rzeczy sprawdza się samemu.
Ale jeśli nie znasz pojęcia empiryzm to lecimy.

Po pierwsze musisz wiedzieć, że PHP5 nadal wykonuje funkcję o nazwie klasy jako konstruktor. Ale tylko wtedy kiedy funkcja __construct() nie jest zdefiniowana. Ta wiedza Ci się przyda. A na potwierdzenie przykład:
  1. <?php
  2.  
  3. class KlasaPHP5 {
  4.  
  5. public function KlasaPHP5() {
  6. echo "Konstruktor (po staremu) KlasaPHP5\n";
  7. }
  8. }
  9.  
  10. new KlasaPHP5();
  11.  
  12. ?>
Wynik:
Cytat
Konstruktor (po staremu) KlasaPHP5

A teraz Twoja sytuacja:
  1. <?php
  2.  
  3. class KlasaPHP4 {
  4.  
  5. function KlasaPHP4() {
  6. echo "Konstruktor KlasaPHP4\n";
  7. }
  8. }
  9.  
  10. class KlasaPHP5 extends KlasaPHP4 {
  11.  
  12. public function __construct() {
  13. // cóż tu wpisać, co?
  14. }
  15. }
  16.  
  17. ?>
To teraz na podstawie wiedzy zdobytej w poprzednim przykładzie wiesz, że kod ma wyglądać tak:
  1. <?php
  2.  
  3. class KlasaPHP4 {
  4.  
  5. function KlasaPHP4() {
  6. echo "Konstruktor KlasaPHP4\n";
  7. }
  8. }
  9.  
  10. class KlasaPHP5 extends KlasaPHP4 {
  11.  
  12. public function __construct() {
  13. parent::__construct();
  14. echo "Konstruktor KlasaPHP5\n";
  15. }
  16.  
  17. public function KlasaPHP5() {
  18. echo "Konstruktor (po staremu) KlasaPHP5\n";
  19. }
  20. }
  21.  
  22. new KlasaPHP5();
  23.  
  24. ?>
Wynik:
Cytat
Konstruktor KlasaPHP4
Konstruktor KlasaPHP5


Ale to samo mogłeś zrobić sam tongue.gif
kreator
Dzięki za wyjaśnienie. smile.gif
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.