2013-07-05 2 views
-1

Хорошо, я мог бы сходить как полный и полный идиот для этого вопроса. Но как именно функция __autoload работает в php? Я никогда не мог заставить его работать и не могу найти хороший учебник, объясняющий, как работает эта функция.PHP Функция __Autoload()

+2

Там вы: [PHP autoload docs] (http://php.net/manual/en/language.oop5.autoload.php) –

+0

Я прочитал это, и это на самом деле не помогает мне. видя, что я слежу за документами PHP.net и до сих пор не могу заставить его работать – Gmz1023

ответ

3

Функция __autoload вызывается, когда вы ссылаетесь на класс, определение которого неизвестно php. вы должны определить логику о том, как загрузить определение такого класса в функцию __autoload. например, следующим образом.

function __autoload($classname) { 
    $filename = "./". $classname .".php"; 
    include_once($filename); 
} 

//when you say $a = new someclass(); autoload gets called with $classname = "someclass" 

в качестве альтернативы вы можете использовать любую функцию как функцию автозагрузки при регистрации этой функции в качестве функции автозагрузки с помощью spl_autoload_register.

function my_autoloader($class) { 
    include 'classes/' . $class . '.class.php'; 
} 

spl_autoload_register('my_autoloader'); 

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

function my_autoloader1($class) { 
    $file = 'classes1/' . $class . '.class.php'; 
    if (!is_file($file)) return false; 
    include $file; 
} 

function my_autoloader2($class) { 
    include 'classes2/' . $class . '.class.php'; 
} 

spl_autoload_register(array('my_autoloader1', 'my_autoloader2')); 
3

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

В качестве примера предположим, что у меня есть код, который создает новый объект Foo, но я не определил класс Foo.

Прежде чем PHP просто сдастся и генерирует ошибку, он назовет __autoload('Foo'). Если класс Foo по-прежнему не определен после завершения функции __autoload(), тогда он будет генерировать ошибку.

Функция __autoload() будет знать, где находится файл, который определяет запрашиваемый класс, и будет include() нужный файл - так, чтобы при его возврате класс теперь определен.

Общая схема автозагрузки заключается в замене символов подчеркивания (_) в имени класса с разделителями каталогов для загрузки нужного файла. Таким образом, класс My_Foo_Class будет определен в файле "My/Foo/Class.php".