С помощью 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();
Если это вообще возможно, каков синтаксис для ссылки на «вызываемый» из его собственного класса?
Я бы последовал предложению Бармара, но если вы по какой-либо причине не хотите создавать экземпляры, вы можете попробовать это решение:
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();