2008-10-29 41 views
3

我正在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方法私人它又喊又叫。

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

我只是想知道这是一个错误还是有解决方法。除非我可以将它公开,但我宁愿不公开。去年php.net上有一篇文章涉及类似的东西,但只是想知道是否有人有任何想法。真的有关系吗?我在我的开发箱上使用PHP 5.2.0,但可以肯定升级。

回答

4

他们必须公开。你的类被实例化,并以你在自己的代码中的方式完全调用。

所以,除非你能找出如何公开调用私有方法的任何类,则没有= P

+0

Gotcha。说得通。 – 2008-10-29 22:45:08

0

传递一个实例化对象作为回调数组的第一个参数。

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

然后你只是使用对象方法而不是类方法。但这些也必须公开。 – Gumbo 2009-10-13 17:05:09