@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 - это клас, файл и клас называется одинакого.
  • Вопрос задан
  • 56 просмотров
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
не функцию, а метод. все правильно делаете. возможно проблема в том что метод не публичный (ну или не существует). смотрите логи в общем
Ответ написан
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. Именовать классы с маленькой буквы это не очень хорошо.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы