Les méthodes de rappel dans le session_set_save_handler de PHP sont-elles privées?
Question
J'écris un gestionnaire de session personnalisé en PHP et j'essaie de rendre privées les méthodes définies dans session_set_save_handler.
session_set_save_handler(
array('Session','open'),
array('Session','close'),
array('Session','read'),
array('Session','write'),
array('Session','destroy'),
array('Session','gc')
);
Par exemple, je peux définir la fonction open de manière à ce qu'elle soit privée sans erreur, mais lorsque je mets la méthode d'écriture à part, elle aboie.
Erreur fatale: appel à une méthode privée Session :: write () from context '' in Inconnu sur la ligne 0
Je me demandais s'il s'agissait d'un bug ou s'il y avait un moyen de le contourner. À moins que je puisse certainement le rendre public, mais je préférerais que non. Il y avait un message de l'année dernière sur php.net qui éludait une chose semblable, mais je voulais juste savoir si quelqu'un avait des idées. Est-ce que c'est vraiment important? J'utilise PHP 5.2.0 sur ma boîte de développement, mais je pourrais certainement effectuer une mise à niveau.
La solution
Ils doivent être publics. Votre classe est instanciée et appelée exactement comme vous le feriez dans votre propre code.
Donc, à moins que vous ne sachiez comment appeler publiquement une méthode privée sur N'IMPORTE QUELLE classe, alors non = P
Autres conseils
Passez un objet instancié en tant que premier paramètre de votre tableau de rappel.
$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')
);