You are here

public function UndefinedFunctionFatalErrorHandler::handleError in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php \Symfony\Component\Debug\FatalErrorHandler\UndefinedFunctionFatalErrorHandler::handleError()

Attempts to convert an error into an exception.

Parameters

array $error An array as returned by error_get_last():

FatalErrorException $exception A FatalErrorException instance:

Return value

FatalErrorException|null A FatalErrorException instance if the class is able to convert the error, null otherwise

Overrides FatalErrorHandlerInterface::handleError

File

vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php, line 27

Class

UndefinedFunctionFatalErrorHandler
ErrorHandler for undefined functions.

Namespace

Symfony\Component\Debug\FatalErrorHandler

Code

public function handleError(array $error, FatalErrorException $exception) {
  $messageLen = strlen($error['message']);
  $notFoundSuffix = '()';
  $notFoundSuffixLen = strlen($notFoundSuffix);
  if ($notFoundSuffixLen > $messageLen) {
    return;
  }
  if (0 !== substr_compare($error['message'], $notFoundSuffix, -$notFoundSuffixLen)) {
    return;
  }
  $prefix = 'Call to undefined function ';
  $prefixLen = strlen($prefix);
  if (0 !== strpos($error['message'], $prefix)) {
    return;
  }
  $fullyQualifiedFunctionName = substr($error['message'], $prefixLen, -$notFoundSuffixLen);
  if (false !== ($namespaceSeparatorIndex = strrpos($fullyQualifiedFunctionName, '\\'))) {
    $functionName = substr($fullyQualifiedFunctionName, $namespaceSeparatorIndex + 1);
    $namespacePrefix = substr($fullyQualifiedFunctionName, 0, $namespaceSeparatorIndex);
    $message = sprintf('Attempted to call function "%s" from namespace "%s".', $functionName, $namespacePrefix);
  }
  else {
    $functionName = $fullyQualifiedFunctionName;
    $message = sprintf('Attempted to call function "%s" from the global namespace.', $functionName);
  }
  $candidates = array();
  foreach (get_defined_functions() as $type => $definedFunctionNames) {
    foreach ($definedFunctionNames as $definedFunctionName) {
      if (false !== ($namespaceSeparatorIndex = strrpos($definedFunctionName, '\\'))) {
        $definedFunctionNameBasename = substr($definedFunctionName, $namespaceSeparatorIndex + 1);
      }
      else {
        $definedFunctionNameBasename = $definedFunctionName;
      }
      if ($definedFunctionNameBasename === $functionName) {
        $candidates[] = '\\' . $definedFunctionName;
      }
    }
  }
  if ($candidates) {
    sort($candidates);
    $last = array_pop($candidates) . '"?';
    if ($candidates) {
      $candidates = 'e.g. "' . implode('", "', $candidates) . '" or "' . $last;
    }
    else {
      $candidates = '"' . $last;
    }
    $message .= "\nDid you mean to call " . $candidates;
  }
  return new UndefinedFunctionException($message, $exception);
}