Question

J'utilise une magie getter / setter classe pour mes variables de session, mais je ne vois pas de différence entre les setters normales et getters.

Le code:

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];
        }
    }
}

Maintenant, la première chose que je remarque est que je dois appeler $session->_unset('var_name') pour enlever la variable, rien « magique » à ce sujet.

En second lieu lorsque je tente d'utiliser $session->some_var cela ne fonctionne pas. Je ne peux obtenir la variable de session en utilisant $_SESSION['some_var'].

Je l'ai regardé le manuel PHP, mais les fonctions le même aspect que le mien.

Suis-je faire quelque chose de mal, ou est-il pas vraiment quoi que ce soit magique sur ces fonctions.

Était-ce utile?

La solution

Première question, lorsque vous appelez

unset($session->var_name);

Il devrait être la même chose que d'appeler

$session->_unset('var_name');

En ce qui concerne de ne pas pouvoir utiliser __get (); Qu'est-ce qui ne fonctionne pas? Qu'est-ce que la variable se permuté sur et ce que les avertissements sont donnés. Assurez-vous que vous avez défini error_reporting() E_ALL.

Il peut aussi être une bonne idée pour vérifier que vous avez appelé session_start

Autres conseils

Je pensais accesseurs étaient des variables à l'intérieur de la 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);

impressions

Array
(
    [foo] => 123
    [bar] => 456
)
Array
(
    [foo] => 123
)

Ok, peut-être pas "magique". Mais fonctionne comme prévu.
Si ce n'est pas ce que vous voulez ... s'il vous plaît élaborer

Je crois comprendre jusqu'à maintenant sur la fonction magique

S'il vous plaît me corriger si je me trompe ...

$ SESSION est un tableau et non un objet Par conséquent, vous pouvez y accéder en utilisant $ session [ 'champ'] et non session- $> champ

Fonction magique vous permet d'utiliser le nom de la fonction __fnName avant toute fonction comme

fnNameNewField (valeur $);

, il sera séparé en NewField comme clé et sera envoyée à __fnName et oprations se fera sur ce

par exemple: setNewId (valeur de $) sera envoyé à __set () avec la clé = new_id et paramètres ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top