⊗ppOpMgSP 91 of 107 menu

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.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta