буферизация вывода — 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();
2

Другие решения

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

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

По вопросам рекламы [email protected]