Хорошо, я мог бы сходить как полный и полный идиот для этого вопроса. Но как именно функция __autoload работает в php? Я никогда не мог заставить его работать и не могу найти хороший учебник, объясняющий, как работает эта функция.PHP Функция __Autoload()
ответ
Функция __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'));
В принципе, это дает вам возможность загрузить определения классов по требованию.
В качестве примера предположим, что у меня есть код, который создает новый объект Foo
, но я не определил класс Foo
.
Прежде чем PHP просто сдастся и генерирует ошибку, он назовет __autoload('Foo')
. Если класс Foo
по-прежнему не определен после завершения функции __autoload()
, тогда он будет генерировать ошибку.
Функция __autoload()
будет знать, где находится файл, который определяет запрашиваемый класс, и будет include()
нужный файл - так, чтобы при его возврате класс теперь определен.
Общая схема автозагрузки заключается в замене символов подчеркивания (_
) в имени класса с разделителями каталогов для загрузки нужного файла. Таким образом, класс My_Foo_Class
будет определен в файле "My/Foo/Class.php"
.
Там вы: [PHP autoload docs] (http://php.net/manual/en/language.oop5.autoload.php) –
Я прочитал это, и это на самом деле не помогает мне. видя, что я слежу за документами PHP.net и до сих пор не могу заставить его работать – Gmz1023