2011-02-03 1 views
1

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

После помещения нескольких эхо и die() s я пришел к выводу, что __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().

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

Fatal error: Class 'Config' not found in E:\xampplite\htdocs\system\Main.php on line 84

+0

вы можете положить __autoload внутри класса в Main->__autoload() функцию? вы хотите использовать автозагрузку в качестве общей функции, не так ли ?. – raultm

ответ

1

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

Вам нужно добавить автозагрузку функцию к исходному сценарию, когда-либо это делать.

+0

Спасибо, я не видел, чтобы это упоминалось в руководстве PHP! -.- Мне также кажется, что я должен подождать семь минут, чтобы выбрать ответ ... –

4

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

+1

Это также предпочтительный способ, потому что другие библиотеки могут использовать собственные автозагрузчики. Две функции с тем же именем запрещены, и если кто-то регистрирует автозагрузчик в 'spl_autoload_register()' '' '__autoload()' -функция больше не вызывается. – KingCrunch

2

Это потому, что вы объявили (то есть метод класса) не глобальный __autoload()