Те, кто создаёт достаточно крупные сайты обычно использует ООП. И крайне желательно каждый класс хранить в отдельном файле, однако, из-за этого возникает необходимость подключать большое количество файлов, из-за чего сильно страдает инкапсуляция ООП. Ведь Вам для внедрения нового класса придётся его подключать в дру...

Функция __autoload в PHP

Те, кто создаёт достаточно крупные сайты обычно использует ООП. И крайне желательно каждый класс хранить в отдельном файле, однако, из-за этого возникает необходимость подключать большое количество файлов, из-за чего сильно страдает инкапсуляция ООП. Ведь Вам для внедрения нового класса придётся его подключать в другие файлы, а в идеале хотелось бы старые файлы при добавлении новой функциональности не менять. Решить данную проблему поможет относительно новая функция в PHP - __autoload(), о которой мы сегодня и поговорим.

Если кратко, то функция __autoload() вызывается, когда мы пытаемся создать объект класса, которого ещё не существует (например, просто не подключён файл).

Теперь разберём пример. Допустим, у нас есть 2 класса: A и B. И пусть они находятся в файлах "a_class.php" и "b_class.php" соответственно. Если мы напишем в отдельном файле такой код, то у нас возникнет ошибка из-за неопределённых классов:

$a = new A();
$b = new B();

Можно подключить их с помощью require_once, но тогда мы возвращаемся к началу статьи. Чтобы этого не делать, используем функцию __autoload() в PHP:

function __autoload($class_name) {
  require_once $class_name."_class.php";
}
$a = new A();
$b = new B();

Теперь никаких ошибок не происходит и оба объекта будут успешно созданы.

То есть при отсутствии подключённого файла PHP передаёт в функцию __autoload() имя класса. И внутри этой функции уже подключается соответствующий файл. Если же вдруг и там ничего не подключится, тогда уже будет ошибка.

Вот такая полезная функция позволит Вам, с одной стороны, сократить код, с другой стороны, код будет более высокого качества. Но обратите внимание, что функция __autoload() появилась только в PHP 5. К счастью, большинство хостингов давно обладают этой версией PHP. Если вдруг у Вас не так, то напишите им в поддержку с просьбой обновиться, либо смените хостинг.