Kirill Fuchs
Kirill Fuchs

Reputation: 13696

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

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();
   }
}

Upvotes: 20

Views: 11151

Answers (2)

Kirill Fuchs
Kirill Fuchs

Reputation: 13696

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();

Upvotes: 19

Al_
Al_

Reputation: 1511

Take into account a constructor is a method that can be overridden as any other method. If the parent class has a constructor, all its children classes will inherit that constructor. If a child overrides the constructor, this will be used when creating new objects and parent's constructor is not called implicitly. If the child does not override the constructor, the parent's constructor will be used. This concept applies to multiple inheritance.

Upvotes: 6

Related Questions