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

Fatal error: Call to private method Session::write() from context '' in Unknown on line 0

Мне просто было интересно, было ли это ошибкой или есть способ обойти это. За исключением этого, я, конечно, могу просто обнародовать это, но я бы не стал. В прошлом году на php.net было сообщение, ускользавшее от подобной вещи, но просто хочу знать, есть ли у кого-нибудь идеи. Это действительно важно? Я использую PHP 5.2.0 на своем компьютере для разработки, но, безусловно, могу обновить его.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
2 011
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Итак, если вы не можете выяснить, как публично вызвать частный метод в ЛЮБОМ классе, тогда no = 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')
);

Тогда вы просто используете методы объекта вместо методов класса. Но они тоже должны быть публичными.

Gumbo 13.10.2009 21:05

Другие вопросы по теме