You are here

public static function Error::getLastCaller in Zircon Profile 8.0

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Utility/Error.php \Drupal\Core\Utility\Error::getLastCaller()

Gets the last caller from a backtrace.

Parameters

array $backtrace: A standard PHP backtrace. Passed by reference.

Return value

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

6 calls to Error::getLastCaller()
Error::decodeException in core/lib/Drupal/Core/Utility/Error.php
Decodes an exception and retrieves the correct caller.
ErrorTest::testGetLastCaller in core/tests/Drupal/Tests/Core/Utility/ErrorTest.php
Tests the getLastCaller() method.
TestBase::errorHandler in core/modules/simpletest/src/TestBase.php
Handle errors during test runs.
TestBase::exceptionHandler in core/modules/simpletest/src/TestBase.php
Handle exceptions.
TestBase::getAssertionCall in core/modules/simpletest/src/TestBase.php
Cycles through backtrace until the first non-assertion method is found.

... See full list

File

core/lib/Drupal/Core/Utility/Error.php, line 116
Contains \Drupal\Core\Utility\Error.

Class

Error
Drupal error utility class.

Namespace

Drupal\Core\Utility

Code

public static function getLastCaller(array &$backtrace) {

  // Errors that occur inside PHP internal functions do not generate
  // information about file and line. Ignore black listed functions.
  while ($backtrace && !isset($backtrace[0]['line']) || isset($backtrace[1]['function']) && in_array($backtrace[1]['function'], static::$blacklistFunctions)) {
    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 gives 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;
}