Могут ли методы обратного вызова в PHP session_set_save_handler быть закрытыми? - PullRequest
3 голосов
/ 30 октября 2008

Я пишу пользовательский обработчик сеанса на 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 на моем компьютере для разработки, но, безусловно, могу обновить.

Ответы [ 2 ]

4 голосов
/ 30 октября 2008

Они должны быть публичными. Ваш класс создается и вызывается точно так же, как в вашем собственном коде.

Итак, если вы не можете понять, как публично вызывать закрытый метод для ЛЮБОГО класса, тогда нет = P

0 голосов
/ 13 октября 2009

Передайте экземпляр объекта в качестве первого параметра вашего массива обратного вызова.

$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')
);
...