Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kontruktor chroniony a dziedziczenie
jajcarzd1
post
Post #1





Grupa: Zarejestrowani
Postów: 215
Pomógł: 19
Dołączył: 24.12.2003
Skąd: Przemyśl

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


Witam ponownie

Mam pewien problem. Otóż mam coś takiego

  1. abstract class A {
  2.  
  3. protected function __construct() {
  4. echo "konstruktor nadrzędny";
  5. }
  6.  
  7. protected function x() {
  8. echo "show";
  9. }
  10.  
  11. }
  12.  
  13. class B extends A {
  14.  
  15. public function y() {
  16.  
  17. }
  18. }
  19.  
  20. $b = new B();


Mam pewną klasę "A" która jest bazową klasą po której dziedziczą inne. Sęk w tym że dając jakąś metodę jako "protected" w klasie dziedziczonej jest ona normalnie dostępna w klasie dziedziczącej. Jeżeli natomiast konstruktor dam w klasie dziedziczonej dam jako protected no to niestety już instancji klasy "B" nie uda mi się stworzyć bo dostaję:

  1. Fatal error</b>: Call to protected B::__construct() from invalid context


choć sądziłem że powinno to być ok. Dopiero gdy zastosuję w klasie "B" jawne wywołanie publicznego konstruktora to jest ok

  1. class B extends A {
  2.  
  3. public function __construct() {
  4. parent::__construct();
  5. }
  6. public function edit() {
  7.  
  8. }
  9. }


Sęk w tym że niektóre klasy dziedziczące będą singletonami i chcę żeby miały tylko jedną instancję dlatego chciałbym w nich dać konstruktor protected

  1. protected function __construct() {}


no ale niestety jak widac nie mogę tego zastosować choć sądziłem że powinno być ok.

Będ wdzięczny za poradę

Dodam jeszcze że w manualu jest wypowiedź jakiegoś usera http://www.php.net/manual/en/language.oop5.decon.php#79986 który podaje coś takeigo

  1. abstract class AAbstract {
  2.  
  3. // Protected Constructor ...
  4. // Abstract Class Can Not Be Created Anyway ...
  5. // No Problems Here.
  6.  
  7. protected function __construct( ) {
  8.  
  9. }
  10.  
  11. // Class Function ...
  12. // Originally In Class A ...
  13. // Which Was Used As A Super Class.
  14.  
  15. public function functionA( ) {
  16.  
  17. }
  18. }
  19.  
  20. class C extends AAbstract {
  21.  
  22. // Protected Constructor ...
  23. // Same As Parent Class ...
  24. // Again No Problems Here.
  25.  
  26. protected function __construct( ) {
  27.  
  28. }
  29.  
  30. // Class Function ...
  31. // Specific To This Class.
  32.  
  33. public function functionC( ) {
  34.  
  35. }
  36. }


czyli tak jak ja chciałem to osiągnąć i według niego to niby działa.

No to jak tam nikt mi nic nie pomoże ?

Ten post edytował jajcarzd1 6.05.2010, 14:52:37


--------------------
My mind is glowing ...
Jeśli pomogłem push the button :)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 21.08.2025 - 02:54