Are parent constructors called if a child class does NOT define a constructor?

Kirill Fuchs picture Kirill Fuchs · Oct 29, 2012 · Viewed 8.5k times · Source

In the PHP Constructors and Destructors documentation it states

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.

But what if the child class does not call a constructor, will the parent constructor still be called? Or should we create a constructor that calls the parent constructor anyway?

IE:

class BaseClass {
   function __construct() {
       print "In BaseClass constructor\n";
   }
}

class SubClass extends BaseClass {
   function __construct() {
       parent::__construct();
   }
}

Answer

Kirill Fuchs picture Kirill Fuchs · Oct 29, 2012

Maybe this was sort of obvious but did some looking around, and a direct answer to this question surprisingly wasn't very easy to find so here it is:

If the child class does NOT define a constructor then the parent constructor will be called.

In the example below $obj will still call the constructor from BaseClass because SubClass never called a constructor.

class BaseClass {
    function __construct() {
       print "In BaseClass constructor\n";
    }
}

class SubClass extends BaseClass {
    //I do not have a constructor :(
}

$obj = new SubClass();