PHP ob_start:使用$ this回调静态方法

时间:2015-05-21 00:07:53

标签: php output-buffering ob-start

使用PHP的ob_start($ callback),您可以将静态方法作为回调传递:

class TemplateRenderer {
  function myCallback($bufferContents) {
    return 'Foobar instead of the buffer';
  }
}

ob_start(array('TemplateRenderer', 'myCallback'));

或者您可以参考这样的对象:

$myTemplateRenderer = new TemplateRenderer();
ob_start(array($myTemplateRenderer, 'myCallback'));

这两个都有效,但我想知道我是否可以从类方法中启动输出缓冲区,并使用$ this引用回调

class TemplateRenderer {
  function myCallback($bufferContents) {
    return 'Foobar instead of the buffer';
  }

  function init() {
    // --- this doesn't work ----
    ob_start(array($this, 'myCallback'));
    // --- this doesn't work either ----
    ob_start(array('this', 'myCallback'));
  }
}

TemplateRenderer::init();

如果它甚至可能,那么引用"可调用"的语法是什么?来自自己的班级?

2 个答案:

答案 0 :(得分:2)

我会遵循Barmar的建议,但如果你因为某种原因不想进行实例化,你可以尝试这个解决方案:

class TemplateRenderer {
  static function myCallback($bufferContents) {
    return 'Foobar instead of the buffer';
  }

  function init() {
    ob_start(array('self', 'myCallback'));
  }
}

TemplateRenderer::init();

答案 1 :(得分:1)

您需要使用对象调用init(),以便设置$this

$myTemplateRenderer = new TemplateRenderer();
$myTemplateRenderer->init();