@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 - это клас, файл и клас называется одинакого.
  • Вопрос задан
  • 38 просмотров
Пригласить эксперта
Ответы на вопрос 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
Похожие вопросы
Zaymigo Нижний Новгород
от 20 000 до 100 000 руб.
Devmasterz Тюмень
от 80 000 до 120 000 руб.