You are here

public function UndefinedMethodFatalErrorHandler::handleError in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php \Symfony\Component\Debug\FatalErrorHandler\UndefinedMethodFatalErrorHandler::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/UndefinedMethodFatalErrorHandler.php, line 27

Class

UndefinedMethodFatalErrorHandler
ErrorHandler for undefined methods.

Namespace

Symfony\Component\Debug\FatalErrorHandler

Code

public function handleError(array $error, FatalErrorException $exception) {
  preg_match('/^Call to undefined method (.*)::(.*)\\(\\)$/', $error['message'], $matches);
  if (!$matches) {
    return;
  }
  $className = $matches[1];
  $methodName = $matches[2];
  $message = sprintf('Attempted to call an undefined method named "%s" of class "%s".', $methodName, $className);
  $candidates = array();
  foreach (get_class_methods($className) as $definedMethodName) {
    $lev = levenshtein($methodName, $definedMethodName);
    if ($lev <= strlen($methodName) / 3 || false !== strpos($definedMethodName, $methodName)) {
      $candidates[] = $definedMethodName;
    }
  }
  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 UndefinedMethodException($message, $exception);
}