Подтвердить что ты не робот

PHP Codeigniter - parent:: __ construct

При получении унаследованного от родительского класса в PHP, особенно в Codeigniter, что делает parent::__construct or parent::model()?

Как это может измениться, если я не __construct родительский класс? И, какой способ предлагается?

-Добавлена ​​-

Основное внимание уделяется Codeigniter конкретному вопросу о вызове parent::__construct по-разному в зависимости от версий, а также, если это можно опустить в случае, если Codeigniter сделает это автоматически.

4b9b3361

Ответ 1

Это нормальный конструктор классов. Рассмотрим следующий пример:

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

Ответ 2

что делает parent:: __ construct или parent:: model() do?

эти функции выполняют точно то же самое, только функция конструктора, которая была названа в честь класса до PHP5. Я говорю в вашем примере, что вы расширяете класс Model (и в какой-то более старой версии CI, поскольку вам не нужно использовать CI_model), если я прав в этом __construct, это то же самое, что и model().

Ответ 3

Он просто выполнит конструктор родительского класса