2010-08-13 10 views
20

byłem wonderinf gdyby mógł mi pomóc ..PHP - rozszerzona __construct

mam dwie klasy, jedna rozciąga drugi .. Klasa B zostanie przedłużony o wielu różnych przedmiotów i wykorzystywane do wspólnych oddziaływań baz .. Teraz chciałbym, aby klasa B obsługiwała połączenia i rozłączała się bez kierunku z klasy A lub dowolnego zewnętrznego wejścia.

Problem z tego, co rozumiem, to że rozszerzona klasa nie uruchomi automatycznie funkcji __construct. Czy istnieje sposób obejścia tego?

góry dzięki ..

class a extends b 
{ 
    public function __construct() 
    { 
    } 

    public function validateStuff() 
    { 
     $this->insert_record(); 
    } 
} 

class b 
{ 
    public function __construct() 
    { 
     $this->connect(); 
    } 

    protected function connect() 
    { 
     return true; 
    } 

    public function insert_record() 
    { 
     return true; 
    } 
} 

Odpowiedz

55

Rodzic __construct() metoda zdefiniowana w klasie B zostanie uruchomiony automatycznie, jeśli dziecko instancję klasy A, chyba jest __construct() metoda zdefiniowana w klasie a.

class a extends b { 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 

Jeśli metoda __construct() jest zdefiniowana w klasie A, to nadpisuje stosowania metody w klasie B __construct() .... to będzie działać zamiast klasa b __construct() metoda

class a extends b { 
    public function __construct() 
    { 
     echo 'In A Constructor'; 
    } 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 

Więc jeśli twoja klasa dziecka ma zdefiniowaną metodę __construct(), musisz jawnie wywołać konstruktora dla rodzica, jeśli chcesz to również wykonać.

class a extends b { 
    public function __construct() 
    { 
     parent::__construct(); 
     echo 'In A Constructor'; 
    } 
} 

class b { 
    public function __construct() 
    { 
     echo 'In B Constructor'; 
    } 
} 

$x = new a(); 
+3

Dzięki :) - Stackoverflow jest tak dobry w posiadaniu i znajdowaniu odpowiednich informacji, które możesz sobie pozwolić na takie przepływy pracy jak "jak, wiem to, ale chcę tylko upewnić się, że nie jestem uruchomiony w jakimś dziwnym intuicji PHP gdzieś" - dzięki haha! – lol

10

Nie jestem pewien, czy w pełni zrozumieć, o co prosicie, ale można zadzwonić rodzice skonstruować metody z konstruktora dziecka

parent::__construct(); 

to jest tylko opcja, którą znam.

+0

Nie chciałem wywoływać konstruktora w ogóle z klasy a .. Miałem nadzieję znaleźć metodę, aby zastosować konstruktor klasy b do automatycznego uruchamiania. – Lee

3

połączeń parent::__construct() w a::__construct():

class a extends b 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public function validateStuff() 
    { 
     $this->insert_record(); 
    } 
} 

można pominąć na konstruktora całkowicie, jeśli nie robią żadnych a-specyficzny materiał.

+0

Nie chciałem wywoływać konstruktora w ogóle z klasy a .. Miałem nadzieję znaleźć metodę, aby zastosować konstruktor klasy b do automatycznego uruchamiania. – Lee

+0

Ahh to była odpowiedź .. pozostawienie konstruktora poza klasą A , klasa B uciekła! Dzięki! – Lee

Powiązane problemy