Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么有人会以这种方式使用ob_start,这有什么意义?_Php - Fatal编程技术网

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'])”)。也许是这样,也许不是。