Могут ли методы обратного вызова в PHP session_set_save_handler быть закрытыми?

StackOverflow https://stackoverflow.com/questions/248478

Вопрос

Я пишу собственный обработчик сеанса в 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')
);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top