argument - PHP Codeigniter-parent::__ construct
private function__ construct() (2)
¿Qué hace parent :: __ construct or parent :: model ()?
estas funciones hacen exactamente lo mismo, solo la función de construcción solía tener el nombre de la clase antes de PHP5. Digo que en su ejemplo está extendiendo la clase Modelo (y en una versión anterior de CI, ya que no necesita usar el modelo_CI), si estoy en lo cierto en este __construct es lo mismo que model ().
Cuando se hereda de una clase primaria en PHP, especialmente en Codeigniter, ¿qué hace parent::__construct or parent::model()
?
¿Cómo haría la diferencia si no __construct
una clase para padres? ¿Y en qué sentido se sugiere?
-Adicional-
El enfoque es más en Codeigniter específico con respecto a una llamada a parent::__construct
de diferentes maneras dependiendo de las versiones y también si esto podría omitirse en caso de que Codeigniter lo hiciera automáticamente.
Este es un constructor de clase normal. Veamos el siguiente ejemplo:
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''
Como puede ver, la clase B hereda todos los valores y funciones de A. Por lo tanto, se puede acceder al miembro de la clase $some_var
desde A como desde B. Como hemos agregado un constructor en la clase B, el constructor de la clase A NO se usará cuando estás creando un nuevo objeto de clase B.
Ahora mira los siguientes ejemplos:
class C extends A {
// empty
}
$c = new C;
$c->echo_some_var(); // will print out ''value added in class A''
Como puede ver, debido a que no hemos declarado un constructor, el constructor de la clase A se usa implícitamente. Pero también podemos hacer lo siguiente, que es equivalente a la clase C:
class D extends A {
function __construct() {
parent::__construct();
}
}
$d = new D;
$d->echo_some_var(); // will print out ''value added in class A''
Así que solo tienes que usar la línea parent::__construct();
cuando desee que un constructor en la clase secundaria haga algo, Y ejecute el constructor principal. Ejemplo dado:
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();
}
}
Se puede encontrar más información aquí: http://php.net/manual/en/language.oop5.php