PHP

Автоматическая загрузка классов в PHP

При разработке приложений на PHP распространенной практикой является создание одного файла на один класс. В результате может получиться весьма внушительный список включений вначале каждого скрипта.

Но с появлением PHP 5 такой список можно элегантно заменить, определив функцию __autoload, которая будет автоматически вызываться в случае использования класса/интерфейса, который еще не определён.

Вот пример. Создадим два класса. Первый будет размещаться в файле Image.php и иметь код:1 <?php
	 class Image { 
	
	 function __construct() { 
	 echo 'Класс Image успешно загружен.<br />'; 
	 } 
	
	 } 
	?> 

Второй класс будет размещаться в файле Test.php:1 <?php
	 class Test { 
	
	 function __construct() { 
	 echo 'Класс Test работает.<br />'; 
	 } 
	
	 } 
	?> 

Для примера мы создали два простых класса с конструкторами, которые выводят сообщения. Теперь создадим файл index.php, в котором будем использовать оба класса:1 <?php
	 function __autoload($class_name) { 
	 require_once $class_name . '.php'; 
	 } 
	
	 $a = new Test(); 
	 $b = new Image(); 
	?> 

Когда запускается index.php в браузере, все отлично работает (все три файла должны находиться в одной папке). Конечно, на двух классах преимущества такой записи не видно. Но представьте, что проект содержит 10 и более классов, и что надо в каждом файле писать require_once много раз.

Кроме того, можно воспользоваться исключениями в PHP 5.3 и выше. Изменим index.php следующим образом:01 <?php
	function __autoload($class_name) { 
	 if(file_exists($class_name . '.php')) { 
	 require_once($class_name . '.php'); 
	 } else { 
	 throw new Exception("Недоступен файл для класса $class_name."); 
	 } 
	} 
	
	try { 
	 $a = new Test(); 
	 $b = new Image(); 
	} catch (Exception $e) { 
	 echo $e->getMessage(), "\n"; 
	} 
	?>

Теперь наш код еще и проверяет наличие файлов и выдает соответствующее предупреждение.
Добавлено: 11 Сентября 2013 01:17:08 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...