3

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

たとえば、オープン関数をエラーなしでプライベートに設定できますが、書き込みメソッドをプライベートにすると、吠えます。

致命的なエラー: 行 0 の不明なコンテキスト '' からプライベート メソッド Session::write() を呼び出します

これがバグなのか、これを回避する方法があるのか​​ 疑問に思っていました。確かにそれを公開することはできませんが、むしろしたくありません。去年の php.net に同様のことを回避する投稿がありましたが、誰かアイデアがあるかどうか知りたいだけです。それは本当に問題ですか?開発ボックスで PHP 5.2.0 を使用していますが、確実にアップグレードできます。

4

2 に答える 2

4

彼らは公開されなければなりません。クラスはインスタンス化され、独自のコードとまったく同じ方法で呼び出されます。

したがって、任意のクラスでプライベートメソッドをパブリックに呼び出す方法を理解できない限り、no = P

于 2008-10-29T22:21:36.980 に答える
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')
);
于 2009-10-13T17:01:59.120 に答える