class UndefinedFunctionErrorEnhancer
@author Fabien Potencier <fabien@symfony.com>
Hierarchy
- class \Symfony\Component\ErrorHandler\ErrorEnhancer\UndefinedFunctionErrorEnhancer implements \Symfony\Component\ErrorHandler\ErrorEnhancer\ErrorEnhancerInterface
Expanded class hierarchy of UndefinedFunctionErrorEnhancer
1 file declares its use of UndefinedFunctionErrorEnhancer
- ErrorHandler.php in vendor/
symfony/ error-handler/ ErrorHandler.php
File
-
vendor/
symfony/ error-handler/ ErrorEnhancer/ UndefinedFunctionErrorEnhancer.php, line 20
Namespace
Symfony\Component\ErrorHandler\ErrorEnhancerView source
class UndefinedFunctionErrorEnhancer implements ErrorEnhancerInterface {
public function enhance(\Throwable $error) : ?\Throwable {
if ($error instanceof FatalError) {
return null;
}
$message = $error->getMessage();
$messageLen = \strlen($message);
$notFoundSuffix = '()';
$notFoundSuffixLen = \strlen($notFoundSuffix);
if ($notFoundSuffixLen > $messageLen) {
return null;
}
if (0 !== substr_compare($message, $notFoundSuffix, -$notFoundSuffixLen)) {
return null;
}
$prefix = 'Call to undefined function ';
$prefixLen = \strlen($prefix);
if (!str_starts_with($message, $prefix)) {
return null;
}
$fullyQualifiedFunctionName = substr($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 = [];
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 UndefinedFunctionError($message, $error);
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
UndefinedFunctionErrorEnhancer::enhance | public | function | Returns an \Throwable instance if the class is able to improve the error, null otherwise. | Overrides ErrorEnhancerInterface::enhance |