Différence entre setters normales et magiques et getters
-
24-09-2019 - |
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.
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 ...