为什么有人会以这种方式使用ob_start,重点是什么?

时间:2011-01-06 22:04:33

标签: php

我复制的课程中有些东西失败了。这不是我的班级,但失败的相关部分是:

class foo {
  function process() {
    ob_start( array( &$this, 'parseTemplate' ) );
  }

  function parseTemplate(){}

}

有谁知道ob_start表达式应该做什么?在parse_template的副本的上下文中调用&$this方法? PHP版本为5.3.2-1。我怀疑这个类的编码是5.0-5.2,它在5.3中断?或者它可能是别的什么?

3 个答案:

答案 0 :(得分:4)

ob_start的第一个参数是回调。

要了解这一点,您必须检查PHP的definition of callback

具体来说,它说

  

实例化对象的方法是   作为包含一个数组的数组传递   索引0处的对象和方法名称   在索引1。

因此,当输出缓冲完成时,实际上这是调用$this->parseTemplate();

我不确定这里是否需要引用运算符&

答案 1 :(得分:2)

ob_start()是输出缓冲,传入的参数应该是在使用ob_flush(),ob_clean()或类似函数刷新缓冲区时调用的回调。

// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));

答案 2 :(得分:1)

如果不知道失败的输出是什么,我可以猜到两件事。 在版本5.3。*中,不需要引用实例,因此&$this只需$this。 另一件事是,就我所知,在任何缓冲输出之前需要调用ob_start ...