Vedi il commento all'interno di ChildEntity ::__construct()
:
class ChildEntity extends ParentEntity
{
/** @var int */
protected $classParameter;
function __construct(int $classParameter)
{
/**
* Question
*
* Below are the two ways of initializing the variable of ChildEntity
*
* Are they both initializing the same child(?) variable?
* Are they initializing the parent(?) variable?
* Can the child and parent have different values at the same time,
* perhaps in different contexts?
*/
$this->classParameter = $classParameter; // init local(?) variable?
parent::__construct($classParameter); // init parent(?) variable?
}
}
class ParentEntity
{
/** @var int */
protected $classParameter;
function __construct(int $classParameter)
{
$this->classParameter = $classParameter;
}
}
$childEntity = new ChildEntity(100);
Perché funziona qui sotto (codice leggermente diverso - parametro rimosso in parent e child usa solo genitore costruttore per inizializzare). Sembra che la classe genitore manipoli una variabile trovata nella classe figlia, senza che tale variabile sia presente in parent. È come se la variabile in ChildEntity
e ParentEntity
diventi una, e le istanze figlio e genitore fungano anche da istanza singola, a tutti gli effetti. È questo ciò che accade realmente dietro le quinte?
class ChildEntity extends ParentEntity
{
/** @var int */
protected $classParameter;
function __construct(int $classParameter)
{
parent::__construct($classParameter);
print $this->classParameter;
}
}
class ParentEntity
{
function __construct(int $classParameter)
{
$this->classParameter = $classParameter;
}
}
$childEntity = new ChildEntity(5);