Как определить, вызывается ли функция из обратного буфера вывода? - PullRequest
2 голосов
/ 04 декабря 2011

В функции, как я могу узнать, была ли она вызвана из обратного буфера вывода (не обязательно напрямую)?

function foo() {
    if (magic here ????)
        $log->write("foo:Callback") 
    else
        $log->write("foo:Normal")
}

function calls_foo() {
    ...stuff
    foo();
}

calls_foo() // should log foo:Normal

ob_start('calls_foo')

    ...stuff

// should log foo:Callback at the end of the script

Ответы [ 2 ]

2 голосов
/ 04 декабря 2011

Чек $debug = debug_backtrace(). Если массив отладки имеет длину 1, то вы вызываетесь из main, что означает, что это обратный вызов ob, вызываемый в конце запроса. Затем вы можете выполнить итерацию массива и посмотреть на 'function' ключ каждого массива для функции очистки.

2 голосов
/ 04 декабря 2011

Функция ob_get_status () возвращает массив, содержащий информацию о текущем состоянии буферизации вывода.

...