Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: konstruktot w klasie abstrakcyjnej
Forum PHP.pl > Forum > PHP
joytec
witam.

mianowicie mamy pewna klase abstrakcyjna i w niej konstruktor. w parametrze konstruktora dodajemy obiekt. Chce wywolac metode na tym obiekcie w osobnej metodzie w klasie abstrakcynej "operacjaobiekt" i z kolei te metode w klasie potomnej "Jakastampotomna" w metodzie "metoda_w_klasie_potomnej". Teraz pytanie nie wiem jak dodac obiekt do konstruktora klasy abstrakcyjnej, z tego co wiem nie mozna tworzyc instancji klas abstrakcyjnych. Czy ten konstruktor tworzy ten obiekt automatycznie po wywolaniu metody w klasie potomnej. Nie wiem prosze o jakies sugestie. Dzieki.

  1. <?php
  2. abstract class Security{
  3. private $_action;
  4. public function __construct($var){
  5.  $this->_action = $var;
  6. }
  7. public function operacjaobiekt(){
  8.  $this->_action->jakasmetoda();
  9. }
  10. }
  11.  
  12. class Jakastampotomna extends Security{
  13. public function metoda_w_klasie_potomnej(){
  14.  $this->operacjaobiekt();
  15. }
  16. }
  17. ?>
koodlaty
Cytat(joytec @ 19.12.2006, 02:48:29 ) *
...z tego co wiem nie mozna tworzyc instancji klas abstrakcyjnych...

Instancji klas abstrakcyjnych - jasne że nie, ale instancje wewnątrz klasy abstrakcyjnej - czemu nie?
W konstruktorze klasy potomnej musisz wywołać konstruktor rodzica statycznie - podając owy obiekt jako parametr.

  1. <?php
  2. class Jakastampotomna extends Security
  3. {
  4.  function __construct($var)
  5.  {
  6. parent::__construct($var);
  7.  }
  8.  
  9.  public function metoda_w_klasie_potomnej()
  10.  {
  11. $this->operacjaobiekt();
  12.  }
  13. }
  14. ?>
thornag
Cytat
  1. <?php
  2. class Jakastampotomna extends Security
  3. {
  4.  function __construct($var)
  5.  {
  6. parent::__construct($var);
  7.  }
  8.  
  9.  public function metoda_w_klasie_potomnej()
  10.  {
  11. $this->operacjaobiekt();
  12.  }
  13. }
  14. ?>


Przeciez konstruktor zostanie odziedziczony 'automagicznie' nie trzeba go 'przeciazac' w ten psosob.
Cysiaczek
@thornag - niestety nie zostanie, jeśli potomna też ma konstruktor - następuje wówczas przysłonięcie konstruktora bazowego. Z tego, co wiem, to mają to w najbliższym czasie poprawić.

Pozdrawiam.
dr_bonzo
A zostanie wywolany gdy nie nadpiszemy konstruktora; a gdy nadpiszemy to nie zostanie
  1. <?php
  2.  
  3. class Rodzic
  4. {
  5. public function __construct()
  6. {
  7. print( "Konstruktor rodzica <br />" );
  8. }
  9. }
  10.  
  11. class DzieckoBezKonstruktora extends Rodzic
  12. {
  13. }
  14.  
  15. class DzieckoZKonstruktorem extends Rodzic
  16. {
  17. public function __construct()
  18. {
  19. print( "Konstruktor DzieckoZKonstruktorem<br />" );
  20. }
  21. }
  22.  
  23. class DzieckoZKonstruktoremIWywolaniemKonstrRodzica extends Rodzic
  24. {
  25. public function __construct()
  26. {
  27. print( "Konstruktor DzieckoZKonstruktoremIWywolaniemKonstrRodzica + " );
  28. parent::__construct();
  29. }
  30. }
  31.  
  32. print( '<hr />' );
  33. $r = new Rodzic();
  34. print( '<hr />' );
  35. $dbk = new DzieckoBezKonstruktora(); // wywola konstruktor rodzica
  36. print( '<hr />' );
  37. $dzk = new DzieckoZKonstruktorem(); // nie wywola k. rodzica bo zostal napisany
  38. print( '<hr />' );
  39. $dzkiwkr = new DzieckoZKonstruktoremIWywolaniemKonstrRodzica(); // reczne wywolanie konstr. rodzica
  40. print( '<hr />' );
  41. ?>
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.