Parte del problema con la clase base cuando PHP crea un objeto de clase derivada

Antes pensaba que al llamar al constructor de una clase derivada, los miembros de la clase base no se pueden usar antes de que se llame al constructor de la clase base, porque el objeto de la clase base aún no se ha construido y los miembros no existen, pero Encontré en la siguiente prueba, antes de llamar al constructor de la clase base, los miembros en la clase base ya existen, y el constructor de la clase base simplemente cambia el valor de los miembros en la clase base:

class base {
    
    
    public $i = 4;
    
    public function func() {
    
    
        print("in base's func" . PHP_EOL);
    }
    
    public function __construct() {
    
    
        print("in base's construct" . PHP_EOL);
        $this->i = 3;
    }
}

class derive extends base {
    
    
    public function __construct() {
    
    
        print("start derive's constructor" . PHP_EOL);
        self::func();
        print("before base's construct: \$i = $this->i" . PHP_EOL);
        parent::__construct();
        print("after base's construct: \$i = $this->i" . PHP_EOL);
    }
}

$deriveObj = new derive();

Ejecute el código anterior:
Inserte la descripción de la imagen aquí
se puede ver que las funciones miembro y los miembros de datos de la clase base se pueden llamar antes de que se ejecute el constructor de la clase base.

Supongo que te gusta

Origin blog.csdn.net/tus00000/article/details/115123352
Recomendado
Clasificación