Вход Регистрация
Файл: vendor/symfony/error-handler/ErrorEnhancer/UndefinedFunctionErrorEnhancer.php
Строк: 180
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyComponentErrorHandlerErrorEnhancer;

use 
SymfonyComponentErrorHandlerErrorFatalError;
use 
SymfonyComponentErrorHandlerErrorUndefinedFunctionError;

/**
 * @author Fabien Potencier <fabien@symfony.com>
 */
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 (
!== 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);
    }
}
Онлайн: 2
Реклама