Получая унаследованный от родительского класса в PHP, особенно в Codeigniter, что делает parent::__construct or parent::model()
?
Как бы это изменилось, если я не __construct
родительский класс? И, какой способ предлагается?
-Added-
Основное внимание уделяется Codeigniter конкретным в отношении вызова parent::__construct
по-разному в зависимости от версий, а также, если это можно опустить в случае, если Codeigniter сделает это автоматически.
Это обычный конструктор классов. Давайте посмотрим на следующий пример:
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'
Как вы видите, класс B наследует все значения и функции от A. Таким образом, член класса $some_var
доступен из A, а также из B. Поскольку мы добавили конструктор в класс B, конструктор класса A НЕ будет использоваться когда вы создаете новый объект класса B.
Теперь рассмотрим следующие примеры:
class C extends A { // empty } $c = new C; $c->echo_some_var(); // will print out 'value added in class A'
Как вы можете видеть, поскольку мы не объявили конструктор, конструктор класса A используется неявно. Но мы также можем сделать следующее, что эквивалентно классу C:
class D extends A { function __construct() { parent::__construct(); } } $d = new D; $d->echo_some_var(); // will print out 'value added in class A'
Поэтому вам нужно использовать только строку parent::__construct();
когда вы хотите, чтобы конструктор в дочернем классе сделал что-то, И выполните родительский конструктор. Пример:
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(); } }
Более подробную информацию можно найти здесь: http://php.net/manual/en/language.oop5.php
что делает parent :: __ construct или parent :: model ()?
эти функции выполняют точно то же самое, только функция construct, которая была названа в честь самого класса до PHP5. Я говорю в вашем примере, что вы расширяете класс Model (и в какой-то более старой версии CI, поскольку вам не нужно использовать CI_model), если я прав в этом __construct, это то же самое, что и model ().