Php 为什么有人会以这种方式使用ob_start,这有什么意义?
我抄的那堂课有点不及格。这不是我的课程,但相关的失败点是:Php 为什么有人会以这种方式使用ob_start,这有什么意义?,php,Php,我抄的那堂课有点不及格。这不是我的课程,但相关的失败点是: class foo { function process() { ob_start( array( &$this, 'parseTemplate' ) ); } function parseTemplate(){} } 有人知道ob\u start表达式应该做什么吗?在和$this副本的上下文中调用parse_template方法?PHP版本是5.3.2-1。我怀疑这个类的代码是5.0-5.2,它在5.
class foo {
function process() {
ob_start( array( &$this, 'parseTemplate' ) );
}
function parseTemplate(){}
}
有人知道ob\u start
表达式应该做什么吗?在和$this
副本的上下文中调用parse_template
方法?PHP版本是5.3.2-1
。我怀疑这个类的代码是5.0-5.2,它在5.3中中断了?或者可能是其他原因?ob\u start()
是输出缓冲,传入的参数应该是一个回调,当使用ob\u flush()、ob\u clean()或类似函数刷新缓冲区时调用该回调
// Type 3: Object method call
$obj = new MyClass();
call_user_func(array($obj, 'myCallbackMethod'));
的第一个参数是回调
要了解它的作用,您必须检查PHP的
具体来说,它说
实例化对象的方法是
作为包含
索引0处的对象和方法名称
在指数1
所以,这实际上是调用$this->parseTemplate()代码>输出缓冲完成时
不过,我不确定这里是否需要引用运算符&
。在不知道失败的输出是什么的情况下,我可以猜到两件事。
在5.3版中。*不需要引用实例,因此&$this
只需$this
。
另一件事是,ob\u start…
需要在任何缓冲区输出之前调用。不需要引用运算符。您可以在输出之前或之后调用它。没什么区别。好吧,我们现在有很多回复说这是一个ob_start回调用法。问题的第二部分是它为什么失败。手册上有一个很大的警告,请检查parseTemplate函数是否包含“chdir(dirname($\u SERVER['SCRIPT\u FILENAME'])”)。也许是这样,也许不是。