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.

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top