¿Los métodos de devolución de llamada en el session_set_save_handler de PHP pueden ser privados?
Pregunta
Estoy escribiendo un controlador de sesión personalizado en PHP y tratando de hacer que los métodos definidos en session_set_save_handler sean privados.
session_set_save_handler(
array('Session','open'),
array('Session','close'),
array('Session','read'),
array('Session','write'),
array('Session','destroy'),
array('Session','gc')
);
Por ejemplo, puedo configurar la función de apertura para que sea privada sin ningún error, pero cuando hago que el método de escritura sea privado, me ladra.
Error fatal: llamada a método privado Session :: write () from context '' in Desconocido en la línea 0
Me preguntaba si esto era un error o si hay una forma de evitarlo. Salvo que ciertamente puedo hacerlo público, pero prefiero no hacerlo. Hubo una publicación del año pasado en php.net eludiendo algo similar, pero solo quiero saber si alguien tuvo alguna idea. ¿Realmente importa? Estoy usando PHP 5.2.0 en mi cuadro de desarrollo, pero sin duda podría actualizar.
Solución
Tienen que ser públicos. Tu clase está instanciada y llamada exactamente de la manera que lo harías en tu propio código.
Entonces, a menos que pueda descubrir cómo llamar públicamente a un método privado en CUALQUIER clase, entonces no = P
Otros consejos
Pase un objeto instanciado como el primer parámetro de su matriz de devolución de llamada.
$session = new Session();
session_set_save_handler(
array($session,'open'),
array($session,'close'),
array($session,'read'),
array($session,'write'),
array($session,'destroy'),
array($session,'gc')
);