UndefinedFunctionFatalErrorHandler.php in Zircon Profile 8
File
vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php
View source
<?php
namespace Symfony\Component\Debug\FatalErrorHandler;
use Symfony\Component\Debug\Exception\UndefinedFunctionException;
use Symfony\Component\Debug\Exception\FatalErrorException;
class UndefinedFunctionFatalErrorHandler implements FatalErrorHandlerInterface {
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);
}
}