@roma_zero

Как вызвать функцию из файла загруженного через spl_autoload_register?

Пишу код вот так:
// это файл index.php
function loading($classname) {
    $ClassFilePath = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $classname . '.php';
        require 'web.php';
}
spl_autoload_register('loading');
$web_page = new web();
echo $web_page->get('https://ya.ru'); // <- тут ни чего не происходит

web.php - это клас, файл и клас называется одинакого.
  • Вопрос задан
  • 36 просмотров
Пригласить эксперта
Ответы на вопрос 2
  • SilenceOfWinter
    @SilenceOfWinter
    та еще зажигалка...
    не функцию, а метод. все правильно делаете. возможно проблема в том что метод не публичный (ну или не существует). смотрите логи в общем
    Ответ написан
  • Screamie
    @Screamie
    Full-stack разработчик
    Здравствуйте! Что-то у вас странный код.

    // это файл index.php
    function loading($classname) {
        // Зачем вы инициализируете переменную $ClassFilePath если нигде ее не используете?
        $ClassFilePath = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $classname . '.php';
    
            require 'web.php';  // Этой строчкой вы подключаете 'web.php' из текущей директории.
    }
    spl_autoload_register('loading');
    $web_page = new web();
    echo $web_page->get('https://ya.ru'); // <- тут ни чего не происходит


    Если web.php находится в той же папке, что и index.php, то проверяйте доступность метода и что он должен возвращать. Возможно, он возвращает вам пустую строку. Но, лучше сделать нормальный autoload файл, подключить его в index.php и прописывать namespace-ы у классов.

    <?php
    
    // Содержимое файла _autoload.php
    function autoload($className)
    {
        if (strpos($className, '\\') !== false) {
            $classFile = str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
    
            if ($classFile === false || !is_file($classFile)) {
                return;
            }
    
        } else {
            return;
        }
    
        include($classFile);
    
        if (!class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
            die("Unable to find '$className' in file: $classFile. Namespace missing?");
        }
    }
    
    spl_autoload_register('autoload');


    И еще советую вам посмотреть PSR рекомендации для оформления кода PHP. Именовать классы с маленькой буквы это не очень хорошо.
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы