Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> konstruktot w klasie abstrakcyjnej
joytec
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 24.06.2005

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
koodlaty
post
Post #2





Grupa: Zarejestrowani
Postów: 118
Pomógł: 3
Dołączył: 6.07.2006
Skąd: Dublin

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
thornag
post
Post #3





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Cysiaczek
post
Post #4





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@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.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 14:41