PHP Inside

 
   
 

Главная


Начало
страница1
страница2
страница3
страница4
страница5
страница6
страница7
страница8
страница9
страница10
страница11
страница12
страница13
страница14
страница15
страница16
страница17
страница18
страница19
страница20
страница21
страница22
страница23
страница24
страница25
страница26
страница27
страница28
страница29
страница30
страница31
страница32
страница33
страница34
страница35
страница36
страница37
страница38
страница39
страница40
страница41
страница42
страница43
страница44
страница45
страница46
страница47
страница48
страница49
страница50
страница51
страница52
страница53
страница54
страница55
страница56
страница57
страница58
страница59
страница60
страница61
страница62
страница63
страница64
страница65
страница66
страница67
страница68
страница69
страница70
страница71
страница72
страница73
страница74
страница75
страница76
страница77
страница78
страница79
страница80
страница81
страница82
страница83
страница84
страница85
страница86
страница87
страница88
страница89

 
 
 

 

 

•  преобразование имени класса в путь к файлу ;

•  подключение требуемого файла ;

•  обработка ситуации , при которой не удаётся подклю­
чить файл .

Рассмотрим подробнее аспекты реализации автомати­ ческой загрузки объектов в РНР .

Поиск загружаемого файла

Соблюдение единого правила именования объектов су­ щественно упрощает задачу поиска файла . Будем считать , что искомый файл существует , а ситуацию , при которой не удается подключить файл , обсудим в следующем раз­ деле . Ознакомимся с тремя наиболее популярными подхо­дами для решения данной задачи .

Хранение путей к файлам в ассоциативном массиве

Можно создать ассоциативный массив , хранящий в качест­ ве ключа - имя класса , а в качестве значения - путь к фай­ лу . Пример :

<? php

function autcload ($ className ) {

// Список файлов , которые необходимо подключить $ files = array (

'User' => '/home/web/html/classes/user.php', "DBDriver' => '/home/web/html/classes/DB/ J mysql.php',

Для повышения эффективности можно вынести соз­
дание массива Sfiles за рамки функции __ autoload () и сэ­
кономить время на создание массива при каждом вызове
автозагрузчика .

Преимущества :

•  не требует соблюдения правила именования файлов /
классов ;

•  высокое быстродействие ;

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

Недостатки :

¦ в случае добавления , переименования , переноса
или удаления класса потребуется обновление списка
подключаемых файлов .

Построение пути к файлу по имени класса

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


можных правил именования файлов : путь к файлу , содер­ жащему определение класса ААА _ ВВВ _ ССС , имеет вид classes / AAA / BBB / CCC . php . Зная это правило , в автоза­ грузчике легко по имени класса построить путь до фай­ ла . Пример кода :

<? php

function _ autoload ($ className ) {

// Извлекаем путь до файла из имени класса $ classNameWithPath = str _ replace ('_', '/', J $ className ) .' .php' ,-

include 'classes/' $classNameHithPath

 

Преимущества :

•  не требует хранения пути до каждого файла , задейст­
вованного в проекте ;

•  добавление , переименование и удаление классов
не требует модификации автозагрузчика .

Недостатки :

•  жестко привязывает имя класса к имени папки , в кото­
рой он хранится , в случае необходимости переноса фай­
ла в другую папку потребуется переименование клас­
са , что повлечет за собой модификацию всего прило­
жения ;

•  неудобные , длинные имена классов .

Поиск загружаемого файла в директориях приложения

В отличие от предыдущего способа нет необходимости из­влекать полный путь до файла . Достаточно иметь возмож­ ность по имени класса узнать имя файла . Наиболее попу­лярное и логичное решение : имя класса совпадает с име­нем файла ( без . php ). Рассмотрим пример реализации :

<?php

function _ autoload(SclassName) {

// Папки , содержащие классы приложения $ appFolders = array (

'/home/web/html/classes/', '/home/web/html/classes/commands/', '/home/web/html/classes/output/',

// Проверяем каждую папку на наличие нужного файла foreach($appFolders as $appFolder) {

// Строим полный путь до нужного файла $ filePath = $ appFolder . $className php'

// Проверим существование файла if(file exists($filePath))(

/7 Подключаем файл

include $filePath

break; i

Можно воспользоваться стандартным механизмом РНР для поиска подключаемых файлов . При вызове функ­ ции include PHP пытается найти нужный файл в одной из папок , заданных в параметре include _ path конфигура­ ционного файла php . ini . Таким образом , если добавить в этот параметр пути к папкам , хранящим файлы прило­ жения , то код автозагрузчика может выглядеть следую­ щим образом :