__autoload () В PHP ничего не делает - PullRequest
1 голос
/ 04 февраля 2011

Я использую последнюю версию XAMPP, и autoload () не работает должным образом. Я в значительной степени заменил свою предыдущую автозагрузку на ту, что была в руководстве по PHP, но безрезультатно.

После установки нескольких эхо и die () я пришел к выводу, что __autoload вообще не вызывается.

class Main
{

    var $config_data;

    function __autoload($class_name) {
        echo "hello.";
        // If the file exists, require it
        if (file_exists(SYSTEMDIR.$class_name.".".EXT)) {
            echo 'Autoloader: The class exists.';
            (require_once(SYSTEMDIR.$class_name.".".EXT))
                or die("I tried to autoload class $class_name, but it failed! =(");
        } else {
            // The file didn't even exist. Die.
            die("I was going to autoload class $class_name, but it didn't exist! =(");
        }

    }

    /*
     * Function __construct
     * @param datatype variable description
     * @return datatype description
     */
   function __construct(/* $arg */) {
       //Load the config

       $this->config = new Config;

       //Load the uri class:
       $this->uri = new Uri;
   }

}

Он не выводит "привет", который находится в самом верху __autoload ().

Единственный вывод:

Неустранимая ошибка: класс 'Config' не найден в E: \ xampplite \ htdocs \ system \ Main.php по линии 84

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011

AFAIK функция __autoload должна быть определена вне класса. Если вы хотите реализовать функцию автозагрузки как часть класса, вы должны использовать обратный вызов и spl_autoload_register

2 голосов
/ 04 февраля 2011

Это потому, что вы объявили функцию Main->__autoload() (то есть метод класса), а не глобальную __autoload()

1 голос
/ 04 февраля 2011

__autoload не идет в классе.Он используется для включения файла, в котором находится класс.

Вам потребуется добавить автозагрузку function в исходный скрипт, чтобы он когда-либо делал что-либо.

...