Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Codeigniter - parent::__construct

Tags:

When getting inherited from a parent class in PHP, especially in Codeigniter what does parent::__construct or parent::model() do?

How would it make difference if I don't __construct parent class? And, which way is suggested?

-Added-

The focus is more on Codeigniter specific regarding a call to parent::__construct in different ways depending on versions and also if this could be omitted in case Codeigniter would do this automatically.

like image 878
Seong Lee Avatar asked Jul 23 '13 11:07

Seong Lee


People also ask

What is parent __ construct () in CodeIgniter?

Specifically in CodeIgniter, If you don't call parent::__construct(); when the application controller is initializing, you'll lose Loader and Core class and $this->load would never works. check system/core/Controller. php lines: 37-54.

What is parent __construct in PHP?

In order to run a parent constructor, a call to parent::__construct() within the child constructor is required. If the child does not define a constructor then it may be inherited from the parent class just like a normal class method (if it was not declared as private). Example #1 Constructors in inheritance.


1 Answers

This is a normal class constructor. Let's look at the following example:

class A {     protected $some_var;      function __construct() {         $this->some_var = 'value added in class A';     }      function echo_some_var() {         echo $this->some_var;     } }  class B extends A {     function __construct() {         $this->some_var = 'value added in class B';     } }  $a = new A; $a->echo_some_var(); // will print out 'value added in class A' $b = new B; $b->echo_some_var(); // will print out 'value added in class B' 

As you see, class B inherits all values and functions from A. So the class member $some_var is accessible from A as well as from B. Because we've added a constructor in class B, the constructor of class A will NOT be used when you are creating a new object of class B.

Now look at the following examples:

class C extends A {     // empty } $c = new C; $c->echo_some_var(); // will print out 'value added in class A' 

As you can see, because we have not declared a constructor, the constructor of class A is used implicitly. But we can also do the following, which is equivalent to class C:

class D extends A {     function __construct() {         parent::__construct();     } } $d = new D; $d->echo_some_var(); // will print out 'value added in class A' 

So you only have to use the line parent::__construct(); when you want a constructor in the child class to do something, AND execute the parent constructor. Example given:

class E extends A {     private $some_other_var;      function __construct() {         // first do something important         $this->some_other_var = 'some other value';          // then execute the parent constructor anyway         parent::__construct();     } } 

More information can be found here: http://php.net/manual/en/language.oop5.php

like image 137
giorgio Avatar answered Oct 04 '22 02:10

giorgio