-1

在 PHP 手册http://www.php.net/manual/en/function.session-set-save-handler.php的这个页面上,我找到了这个函数规范:bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc )它表示所有参数都应该是回调。但我也在那个页面上找到了这个例子:

    class FileSessionHandler
    {
        private $savePath;

        function open($savePath, $sessionName)
        {
            $this->savePath = $savePath;
            if (!is_dir($this->savePath)) {
                mkdir($this->savePath, 0777);
            }

            return true;
        }

        function close()
        {
           ...
        }
        ...
    }
$handler = new FileSessionHandler();
session_set_save_handler(
    array($handler, 'open'),
    array($handler, 'close'),
    array($handler, 'read'),
    array($handler, 'write'),
    array($handler, 'destroy'),
    array($handler, 'gc')
    );

中的每个参数session_set_save_handler都是一个数组,其中第一个元素是处理程序对象,第二个元素是字符串。

为什么这些数组可以用作回调?我参考了 Array,回调手册,但没有找到任何关于这如何可能的线索。

4

2 回答 2

1
array($handler, 'open')

为什么这些数组可以用作回调?

http://php.net/manual/en/language.types.callable.php

因为它是一个有效的回调定义:

array($instance,'method')

或者

array($class,'staticMethod')

检查提供的链接中的 example#1 type 2 和 type 3。

于 2013-04-07T16:59:53.067 回答
0

您可能会觉得很有启发性:

http://php.net/manual/en/language.types.callable.php

相当广泛的数据可以作为 PHP 中的可调用对象传递,包括包含全局作用域或内置函数名称的字符串、闭包(自 PHP 5.3 起)或包含类名称的数组以及该类或对象实例中的静态方法的名称以及该对象的类上的实例方法的名称。

于 2013-04-07T16:58:37.017 回答