Diferencia entre los emisores y los captadores normales y mágicos
-
24-09-2019 - |
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.
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 ...