2011-01-06 94 views
2

我在复制的课程中发生了某些错误。这不是我的课,但失败的相关位是:为什么有人会以这种方式使用ob_start,这有什么意义?

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

    function parseTemplate(){} 

} 

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

+0

好的,我们现在有很多的回应,说这是一个ob_start回调用法。问题的第二部分是它为什么失败。手册上有一个很大的警告,请检查parseTemplate函数是否包含“chdir(dirname($ _ SERVER ['SCRIPT_FILENAME']))”。也许是这样,或者不是。 – regilero 2011-01-06 22:34:24

回答

4

的第一个参数ob_start是一个回调。

要理解这是什么,你必须检查PHP的definition of callback

具体而言,它说

一个实例化的对象的方法是 作为含有 对象索引0处的阵列,并且该方法名 索引1

传递所以,当输出缓冲完成时,实际做的是呼叫$this->parseTemplate();

虽然我不确定是否需要参考运算符&

+0

不需要参考运算符。 – 2011-01-06 22:12:45

2

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

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

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

+0

您可以在输出之前或之后调用它。没有什么区别。 – profitphp 2011-01-06 22:16:30