Ipotizzando uno ha una classe base astratta foo
con __get()
definito, e una classe figlia bar
che eredita da foo
con una variabile privata $var
, sarà il genitore __get()
essere chiamato quando si cerca di accedere al privato $var
da fuori dalla classe?PHP
Q
PHP
9
A
risposta
10
Sì.
<?php
abstract class foo
{
public function __get($var)
{
echo "Parent (Foo) __get() called for $var\n";
}
}
class bar extends foo
{
private $var;
public function __construct()
{
$this->var = "25\n";
}
public function getVar()
{
return $this->var;
}
}
$obj = new bar();
echo $obj->var;
echo $obj->getVar();
?>
uscita:
$ php test.php
Parent(Foo) __get() ha chiesto var
4
Sì. __get()
e __set()
(e __call()
) sono richiamati quando si accede a un membro dati che non è visibile all'esecuzione corrente.
In questo caso, $var
è privato, quindi l'accesso pubblico richiamerà l'hook __get()
.