Pregunta

Estoy utilizando una clase de magia captador / definidor de mis variables de sesión, pero no veo ninguna diferencia entre los emisores y los captadores normales.

El código:

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

Ahora, la primera cosa que noté es que tengo a $session->_unset('var_name') llamada para eliminar la variable, no hay nada 'mágico' al respecto.

En segundo lugar, cuando trato de usar $session->some_var esto no funciona. Sólo puedo obtener la variable de sesión utilizando $_SESSION['some_var'].

He mirado el manual de PHP, pero las funciones de apariencia distinta a la mía.

¿Estoy haciendo algo mal, o no hay realmente nada mágico sobre estas funciones.

¿Fue útil?

Solución

En primer tema, cuando se llama

unset($session->var_name);

Debe ser el mismo que llamar

$session->_unset('var_name');

En cuanto a no ser capaz de utilizar __get (); Lo que no funciona? ¿Qué significa el conjunto de obtener la variable y lo que se les da advertencias. Asegúrese de haber fijado error_reporting() a E_ALL.

También puede ser una buena idea para comprobar que haya llamado session_start

Otros consejos

pensé captadores y definidores eran para las variables dentro de la clase?

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);

impresiones

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

Ok, tal vez no "mágica". Pero funciona como está previsto.
Si eso no es lo que quiere elaborar favor ...

Este es mi entendimiento hasta ahora acerca de la función mágica

Por favor, corríjanme si me equivoco ...

$ SESIÓN es una matriz y no con un objeto Por lo tanto, se puede acceder a ellos utilizando $ sesión [ 'campo'] y no $ session-> campo

Función de magia le permite usar el nombre de función __fnName antes de cualquier función como

fnNameNewField ($ value);

así, se puede separar en NewField como la clave y se enviará a __fnName y elaboraciones se hará sobre este

por ejemplo: setNewId ($ valor) será enviado a __set () con la tecla = NEW_ID y parámetros ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top