Mam pewien problem. Otóż mam coś takiego
abstract class A { protected function __construct() { } protected function x() { } } class B extends A { public function y() { } } $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ę:
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
class B extends A { public function __construct() { parent::__construct(); } public function edit() { } }
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
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
abstract class AAbstract { // Protected Constructor ... // Abstract Class Can Not Be Created Anyway ... // No Problems Here. protected function __construct( ) { } // Class Function ... // Originally In Class A ... // Which Was Used As A Super Class. public function functionA( ) { } } class C extends AAbstract { // Protected Constructor ... // Same As Parent Class ... // Again No Problems Here. protected function __construct( ) { } // Class Function ... // Specific To This Class. public function functionC( ) { } }
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 ?