为什么有人会以这种方式使用ob_start,这有什么意义?
我在复制的课程中发生了某些错误。这不是我的课,但失败的相关位是:为什么有人会以这种方式使用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?或者它可能是别的东西?
的第一个参数ob_start
是一个回调。
要理解这是什么,你必须检查PHP的definition of callback。
具体而言,它说
一个实例化的对象的方法是 作为含有 对象索引0处的阵列,并且该方法名 索引1
传递所以,当输出缓冲完成时,实际做的是呼叫$this->parseTemplate();
。
虽然我不确定是否需要参考运算符&
。
不需要参考运算符。 – 2011-01-06 22:12:45
ob_start()
ob_start()
是输出缓冲,传入的参数应该是一个回调,当缓冲区用ob_flush(),ob_clean()或类似的函数刷新时会被调用。
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
不知道失败的输出是什么,我可以猜测2件事。 在版本5.3。*中,不需要引用实例,因此&$this
只需要$this
。 另一件事就是在我知道的任何缓冲区输出之前需要调用ob_start ...
。
您可以在输出之前或之后调用它。没有什么区别。 – profitphp 2011-01-06 22:16:30
好的,我们现在有很多的回应,说这是一个ob_start回调用法。问题的第二部分是它为什么失败。手册上有一个很大的警告,请检查parseTemplate函数是否包含“chdir(dirname($ _ SERVER ['SCRIPT_FILENAME']))”。也许是这样,或者不是。 – regilero 2011-01-06 22:34:24