Могут ли методы обратного вызова в PHP session_set_save_handler быть закрытыми?
Вопрос
Я пишу собственный обработчик сеанса в PHP и пытаюсь сделать методы, определенные в 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')
);
Например, я могу установить функцию open как приватную без каких-либо ошибок, но когда я делаю метод write приватным, он гавкает на меня.
Неустранимая ошибка: вызов частного метода Session :: write () из контекста '' в Неизвестно в строке 0
Мне просто интересно, была ли это ошибка или есть способ обойти это. За исключением того, что я, конечно, могу просто обнародовать это, но я бы предпочел не делать этого. В прошлом году на php.net была публикация, рассказывающая о подобных вещах, но я просто хочу узнать, есть ли у кого-нибудь идеи. Это действительно имеет значение? Я использую PHP 5.2.0 на моем компьютере для разработки, но, безусловно, могу обновить Р>
Решение
Они должны быть публичными. Ваш класс создается и вызывается точно так же, как в вашем собственном коде.
Итак, если вы не можете понять, как публично вызывать закрытый метод для ЛЮБОГО класса, тогда нет = P
Другие советы
Передайте экземпляр объекта в качестве первого параметра вашего массива обратного вызова.
$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')
);