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.