openfrog
openfrog

Reputation: 40765

After subclassing, how can I override the parent's constructor while still using it?

Example: I have a class called ParentClass. ParentClass has a constructor like this:

function __construct($tpl) {
    // do something with the $tpl
}

When creating a new instance of ParentClass, I must provide that $tpl parameter like this:

$p = new ParentClass('index');

Then there's a ChildClass extends ParentClass. I want that the constructor of ChildClass provides that $tpl to ParentClass, but of course I don't want just an instance of ParentClass, but of ChildClass.

So when creating a new ChildClass instance, I want it to look like:

$foo = new ChildClass();

But internally, I want it to provide that 'index' to the constructor of ParentClass.

How can I achieve that in PHP?

Upvotes: 2

Views: 1723

Answers (4)

Rich Adams
Rich Adams

Reputation: 26584

You can call parent::_construct('index'); from within the ChildClass constructor. This will construct the base class using index.

Upvotes: 1

Sarfraz
Sarfraz

Reputation: 382881

Try this:

class ChildClass extends ParentClass{
  function __construct($tpl) {
    parent::__construct($tpl);
  }
}

Now create the instance of childclass:

$p = new ChildClass('index');

Note: In your child class, you should include the parent class.

Upvotes: 1

Ikke
Ikke

Reputation: 101251

With parent::__construct() you can call the constructor of the parent.

class ChildClass extends ParentClass
{
    function __construct()
    {
        parent::__construct('index');
    }
}

Upvotes: 1

Ivan Krechetov
Ivan Krechetov

Reputation: 19220

class ChildClass extends ParentClass {
    public function __construct() {
        parent::__construct('index');
    }
}

Upvotes: 3

Related Questions