PHP

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

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

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

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

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

Для примера мы создали два простых класса с конструкторами, которые выводят сообщения. Теперь создадим файл index.php, в котором будем использовать оба класса:
 	<?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 следующим образом:
 	<?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";
	}
 	?>

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