2008-10-29 73 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