views:

224

answers:

2

Take this example:

abstract class Base {
    function __construct() {
        echo 'Base __construct<br/>';
    }
}

class Child extends Base {
    function __construct() {
        echo 'Child __construct<br/>';
    }
}

$c = new Child();   

Coming from a C# background, I expect the output to be

Base __construct
Child __construct

However, the actual output is just

Child __construct

+2  A: 

No, the constructor of the parent class is not called if the child class defines a constructor.

From the constructor of your child class, you have to call the constructor of the parent's class :

parent::__construct();

Passing it parameters, if needed.

Generally, you'll do so at the beginning of the constructor of the child class, before any specific code ; which means, in your case, you'd have :

class Child extends Base {
    function __construct() {
        parent::__construct();
        echo 'Child __construct<br/>';
    }
}


And, for reference, you can take a look at this page of the PHP manual : Constructors and Destructors -- it states (quoting) :

Note: Parent constructors are not called implicitly if the child class defines a constructor.
In order to run a parent constructor, a call to parent::__construct() within the child constructor is required.

Pascal MARTIN
A: 

Well, I just found this in the docs:

Note: Parent constructors are not called implicitly if the child class defines a constructor. In order to run a parent constructor, a call to parent::__construct() within the child constructor is required.

scottm