Scrittura delle proprietà tramite magia in OOP in PHP
Il metodo magico __set viene richiamato
quando si tenta di modificare il valore di una proprietà
inesistente o nascosta. Accetta come parametri
il nome della proprietà e il valore che
si sta tentando di assegnarle.
Vediamo un esempio pratico.
Supponiamo di avere questa classe Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Creiamo in questa classe il metodo magico
__set, che utilizzando la funzione
var_dump visualizzerà il nome della proprietà
a cui si è tentato di accedere e il valore
che si sta tentando di impostare per quella proprietà:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Verifichiamo il funzionamento della nostra classe:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump del metodo __set visualizzerà 'prop value'
?>
Ora impostiamo il valore
alla proprietà il cui nome è memorizzato nella variabile
$property:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // impostiamo il valore
}
}
?>
Ora potremo scrivere nelle proprietà private dall'esterno della classe:
<?php
$test = new Test;
$test->prop1 = 1; // scriveremo 1
$test->prop2 = 2; // scriveremo 2
?>
Possiamo scrivere, tuttavia, verificare se ciò che abbiamo scritto è stato memorizzato - no, poiché le proprietà sono private.
Si può creare un getter per queste proprietà o
semplicemente utilizzare il metodo magico
__get. Utilizziamo la seconda opzione:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Getter magico per le proprietà:
public function __get($property)
{
return $this->$property;
}
}
?>
Ora possiamo verificare il funzionamento della nostra classe. Verifichiamo:
<?php
$test = new Test;
$test->prop1 = 1; // scriveremo 1
$test->prop2 = 2; // scriveremo 2
echo $test->prop1; // visualizzerà 1
echo $test->prop2; // visualizzerà 2
?>
In realtà, ovviamente, non è consigliabile permettere a chiunque di scrivere nelle proprietà private, altrimenti si perde il senso stesso di queste proprietà private (sarebbe più semplice renderle pubbliche e basta).
Pertanto, questo metodo dovrebbe essere utilizzato solo quando ce n'è effettivamente necessità. Nelle prossime lezioni vedremo altri esempi di applicazione efficace.