Differenza tra setter e getter normali e magici
-
24-09-2019 - |
Domanda
Sto usando una magia getter / setter della classe per le mie variabili di sessione, ma non vedo alcuna differenza tra setter e getter normali.
Il codice:
class session
{
public function __set($name, $value)
{
$_SESSION[$name] = $value;
}
public function __unset($name)
{
unset($_SESSION[$name]);
}
public function __get($name)
{
if(isset($_SESSION[$name]))
{
return $_SESSION[$name];
}
}
}
Ora la prima cosa che ho notato è che devo chiamare $session->_unset('var_name')
per rimuovere la variabile, niente di 'magico' di questo.
In secondo luogo, quando si tenta di utilizzare $session->some_var
questo non funziona. Posso solo ottenere la variabile di sessione utilizzando $_SESSION['some_var']
.
Ho guardato il PHP manuale, ma le funzioni lo stesso aspetto come il mio.
sto facendo qualcosa di sbagliato, o non c'è davvero nulla di magico su queste funzioni.
Soluzione
Prima edizione, quando si chiama
unset($session->var_name);
Dovrebbe essere lo stesso di chiamare
$session->_unset('var_name');
Per quanto riguarda non essere in grado di utilizzare __get (); Che cosa non funziona? Che cosa significa il set get variabile e quali avvertenze sono dati. Assicurarsi di aver impostato error_reporting()
a E_ALL.
Può anche essere una buona idea per controllare hai chiamato session_start
Altri suggerimenti
ho pensato getter e setter erano per le variabili all'interno della classe?
class SomeClass {
private $someProperty;
function __get($name) {
if($name == 'someProperty') return $this->someProperty;
}
function __set($name, $value) {
if($name == 'someProperty') $this->someProperty = $value;
}
}
$someClass = new SomeClass();
$someClass->someProperty = 'value';
echo $someClass->someProperty;
class session { /* ...as posted in the question ... */ }
session_start();
$s = new session;
$s->foo = 123;
$s->bar = 456;
print_r($_SESSION);
unset($s->bar);
print_r($_SESSION);
stampe
Array
(
[foo] => 123
[bar] => 456
)
Array
(
[foo] => 123
)
Ok, forse non "magico". Ma funziona come previsto.
Se questo non è ciò che si desidera si prega di elaborare ...
Questa è la mia comprensione fino ad ora sulla funzione magica
Si prega di correggere me se sbaglio ...
$ SESSION è un array e non un oggetto quindi è possibile accedervi utilizzando $ sessione [ 'campo'] e non $ session-> campo
magia funzione consente di utilizzare il nome della funzione __fnName prima di qualsiasi funzione come
fnNameNewField ($ value);
così, sarà suddiviso in NewField come chiave e sarà inviato al __fnName e oprations sarà fatto su questo
ad esempio: setNewId ($ value) verrà inviato __set () con chiave = new_id e parametri ...