PHP ob_start: обратный вызов статического метода с $this

С помощью 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 ответа

Я бы последовал предложению Бармара, но если вы по какой-либо причине не хотите создавать экземпляры, вы можете попробовать это решение:

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

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

TemplateRenderer::init();

Вам нужно позвонить init() используя объект так, чтобы $this будет установлен.

$myTemplateRenderer = new TemplateRenderer();
$myTemplateRenderer->init();
Другие вопросы по тегам