列出所有使用的输出处理程序

# ob_list_handlers

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ob_list_handlers — 列出所有使用的输出处理程序

### 说明

function ob_list_handlers(): array

列出所有使用的输出处理程序。

### 参数

此函数没有参数。

### 返回值

这将返回数组，其中包含正在使用的输出处理程序（如果有）。

如果启用了 output_buffering 并且未设置 output_handler，或者没有回调或 `null` 传递给 ob_start()，则返回`"default output handler"`。启用 output_buffering 并设置 output_handler相当于将内部（内置）函数传递给 ob_start()。

如果将 callable 传递给 ob_start()，则返回 callable 的完全限定名称。如果 callable 是实现 __invoke() 的对象，则返回该对象的 __invoke() 方法的完全限定名称。如果 callable 是 Closure，则返回 `"Closure::__invoke"`。

### 示例

示例 #1 ob_list_handlers() 示例

    <?php
    // 使用 output_buffering=On，没有设置 output_handler
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 没有 callback 或为 null
    ob_start();
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 匿名函数
    ob_start(function($string) { return $string; });
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 箭头函数
    ob_start(fn($string) => $string);
    var_dump(ob_list_handlers());
    ob_end_flush();

    // first class callable
    $firstClassCallable = userDefinedFunction(...);

    ob_start([$firstClassCallable, '__invoke']);
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 内部（内置）函数
    ob_start('print_r');
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 用户定义函数
    function userDefinedFunction($string, $flags) { return $string; };

    ob_start('userDefinedFunction');
    var_dump(ob_list_handlers());
    ob_end_flush();

    class MyClass {
        public static function staticHandle($string) {
            return $string;
        }

        public static function handle($string) {
            return $string;
        }

        public function __invoke($string) {
            return $string;
        }
    }

    // 类或静态方法
    ob_start(['MyClass','staticHandle']);
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 对象或非静态方法
    ob_start([new MyClass,'handle']);
    var_dump(ob_list_handlers());
    ob_end_flush();

    // 可调用对象
    ob_start(new MyClass);
    var_dump(ob_list_handlers());
    ob_end_flush();
    ?>

以上示例会输出：

    array(1) {
      [0]=>
      string(22) "default output handler"
    }
    array(1) {
      [0]=>
      string(22) "default output handler"
    }
    array(1) {
      [0]=>
      string(7) "print_r"
    }
    array(1) {
      [0]=>
      string(19) "userDefinedFunction"
    }
    array(1) {
      [0]=>
      string(17) "Closure::__invoke"
    }
    array(1) {
      [0]=>
      string(17) "Closure::__invoke"
    }
    array(1) {
      [0]=>
      string(17) "Closure::__invoke"
    }
    array(1) {
      [0]=>
      string(21) "MyClass::staticHandle"
    }
    array(1) {
      [0]=>
      string(15) "MyClass::handle"
    }
    array(1) {
      [0]=>
      string(17) "MyClass::__invoke"
    }

### 参见

- ob_end_clean() - 清空（擦除）活动缓冲区的内容并关闭它
- ob_end_flush() - 冲刷（发送）活动输出处理程序的返回值，并关闭活动输出缓冲区
- ob_get_flush() - 冲刷（发送）活动输出处理程序的返回值，返回活动输出缓冲区的内容并将其关闭
- ob_start() - 打开输出控制缓冲

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open