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.
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With