为什么数组可以用作回调

时间:2013-04-07 16:55:14

标签: php

在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,回调手册,但没有找到关于如何做到这一点的线索。

2 个答案:

答案 0 :(得分:1)

array($handler, 'open')
  

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

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

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

array($instance,'method')

array($class,'staticMethod')

检查示例#1类型2并在提供的链接中输入3。

答案 1 :(得分:0)

你可能会发现有益的:

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

可以将各种各样的数据作为PHP中的callable传递,包括包含全局范围或内置函数名称的字符串,Closure(从PHP 5.3开始)或包含名称的数组类的类和该类或对象实例中的静态方法的名称以及该对象类的实例方法的名称。

相关问题