function _drupal_get_last_caller

Gets the last caller from a backtrace.

Parameters

$backtrace: A standard PHP backtrace.

Return value

An associative array with keys 'file', 'line' and 'function'.

5 calls to _drupal_get_last_caller()
DrupalTestCase::errorHandler in modules/simpletest/drupal_web_test_case.php
Handle errors during test runs.
DrupalTestCase::exceptionHandler in modules/simpletest/drupal_web_test_case.php
Handle exceptions.
DrupalTestCase::getAssertionCall in modules/simpletest/drupal_web_test_case.php
Cycles through backtrace until the first non-assertion method is found.
_drupal_decode_exception in includes/errors.inc
Decodes an exception and retrieves the correct caller.
_drupal_error_handler_real in includes/errors.inc
Provides custom PHP error handling.

File

includes/errors.inc, line 267

Code

function _drupal_get_last_caller($backtrace) {
    // Errors that occur inside PHP internal functions do not generate
    // information about file and line. Ignore black listed functions.
    $blacklist = array(
        'debug',
        '_drupal_error_handler',
        '_drupal_exception_handler',
        'drupal_trigger_fatal_error',
    );
    while ($backtrace && !isset($backtrace[0]['line']) || isset($backtrace[1]['function']) && in_array($backtrace[1]['function'], $blacklist)) {
        array_shift($backtrace);
    }
    // The first trace is the call itself.
    // It gives us the line and the file of the last call.
    $call = $backtrace[0];
    // The second call give us the function where the call originated.
    if (isset($backtrace[1])) {
        if (isset($backtrace[1]['class'])) {
            $call['function'] = $backtrace[1]['class'] . $backtrace[1]['type'] . $backtrace[1]['function'] . '()';
        }
        else {
            $call['function'] = $backtrace[1]['function'] . '()';
        }
    }
    else {
        $call['function'] = 'main()';
    }
    return $call;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.