sintassi:
__metodo doppio _
lista metodi:
sintassi:
i metodi hanno 2 parametri (nome del metodo chiamato, array argomenti passati)
public function __call($nomemetodo, $argomento) {...} funzione __call
public function __callStatic($nomemetodo, $argomento) {...} funzione __callStatic
richiamo di una metodo non corretto (nome runTest + argomento 'Oggetto nel contesto')
$oggetto->runTest('stringa argomento'); richiamo metodo non esistente e quindi la __call
Classe::runTest('stringa argomento'); importo metodo non esistente e quindi la __callStatic
esempio: stratgemma per creare al volo una proprietà in caso di set e get di proprietà inesistente
class Test classe creata
{
private $testArray = array(); creo un array da usare come buffer}
public function __set($prop, $valore) si attiva quando si cerca di settare di una proprità inseistente
{$this->testArray[$prop] = $valore; utilizzo gli argomenti per creare la proprietà e dare un valore}
public function __get($prop) si attiva quando si cerca di leggere ad una propietà inesistente
{return $this->testArray[$prop]; restituisce il valore della propietà finta creata in precedenza}
public function __isset($prop) si verifica una propietà che non esiste
{return isset($this->testArray[$prop]); resituisce un booleano che indica se l'array buffer con quel argomento esiste}
public function __unset($prop) si cerca di distruggere una propietà che non esiste
{unset($this->testArray[$prop]); distruzione elemento arfray con la chiave come argomento}
$oggetto->nome = "Giulia"; gli do un valore stringa Giulia}
esempio: serializzo e unserializzo un oggetto dopo aver settato le sue proprietà e deciso cosa serializzare o meno
class Person
{
private $name;}
private $cf;
public function setName($name)
{$this->name = $name;}
public function getName()
{return $this->name;}
public function setCF($cc)
{$this->cf = $cc;}
public function getCF()
{return $this->cf;}
public function __sleep() creo l'array da serializzare
{return array("name","cf");}
public function __wakeup() sistemo l'oggetto dopo averlo unserializzarlo
{if($this->name == "Giulia")}
{$this->cf = "CZZGLI12A44E123K";}
esempio: preparo l'oggetto in caso di var_export()
class Classe
{
public $a;}
public $b;
public static function __set_state($arr) in caso di var_export()
{$obj = new Classe; creo oggetto}
$obj->a = $arr['a']; preparo le proprietà
$obj->b = $arr['b'];
return $obj; restituisco l'oggetto
esempio: uso l'oggetto come funzione e quindi attivo echo
class Classe
{
public function __invoke($x)}
{echo $x;}
esempio: uso l'oggetto come funzione e quindi attivo echo
class Person
{
public function __construct($name)}
{$this->name = $name;}
public function __toString()
{return $this->name;}