Настройка включает путь и автозагрузка двух разных вещей?

StackOverflow https://stackoverflow.com/questions/4415126

Вопрос

Я замечаю, что добавление включенного пути папки, которую мне нужно недостаточно для доступа к классам.

У меня есть приложение / тесты папки / которые содержит приложение / тесты / test.php

Class Test.php называется тестом без каких-либо префиксов

class Test {

}

Если я добавлю папку тестов только в пути включения

realpath(APPLICATION_PATH . '/tests')

Class Test.php не работает в контроллерах

new Test()

Так что не включая папку в WiLE PATH PATH достаточно?

Это было полезно?

Решение

@Stasm имеет право. Но вот немного больше объяснения.

То include_path говорит PHP, где посмотреть, когда он выполняет include, ан include_once, А. require, или а require_once. Отказ Конечно, эти includeпесок requireS Всегда ссылаться на конкретный файл.

Автозагрузка специально о пропущении классы. Отказ Когда в качестве не разгруженного класса упоминается в коде - как правило, хотя и не исключительно, вызывая new Оператор, как в вашем примере - то автозагрузка - это процесс, который может ударить с алгоритмом для загрузки класса. Этот процесс, как правило, включает в себя начать с имени пропущенного класса и получения набора возможных путей - либо абсолютно в файловой системе, либо относительно записей в include_path - от имени пропущенного класса, а затем выполнять выполнение include В надежде, что определение класса находится в одном из них.

В вашем случае вы призвал класс по имени «тест». Файл, содержащий этот класс, находится в файле APPLICATION_PATH . 'tests/Test.php'. Отказ И вы поместили каталог APPLICATION_PATH . 'tests' в include_path. Отказ Но пока не существует алгоритм автозагрузки, для системы нет никакого способа подключить имя класса 'Test' к имени файла 'Test.php'.

То Название класса в грушевом стиле предоставит это соединение. И автозагрузчик, который использует эту Конвенцию - как AutoLoader autoLoader Zend по умолчанию - сможет выполнить это отображение из имени класса к имени файла, а затем include требуемый файл.

В качестве окончательного осложнения, обычная рамочная структура Zend Framework Directory размещает определенные классы в папках, которые НЕТ На включении пути: модели, формы, услуги, контроллеры, смотровые помощники, помощники действий и т. Д. Вот почему вы часто видите больше конфигурации автозагрузчика - как правило, в Bootstrap класс - определение сопоставления между определенными классами и определенными местами в файловой системе, которые являются выключенный то include_path.

Например, класс под названием «Default_Model_user» может на первый взгляд - ожидается проживать на include_path в файле 'Default/Model/User.php'. Отказ Но стандартная структура каталогов приложений хочет поместить этот файл в «Приложение / Модели / user.php». Обратите внимание на множественное число «модели» и нижний регистр «М» В названии пути, а также наличие «по умолчанию» в классе. Требуется дополнительная конфигурация на автозагрузчике для того, чтобы иметь смысл того, что предоставляет шаблон для отображения классов и имени файла. Это обычно достигается с Ресурс автозагрузчик.

Надеюсь, что кто-то из этого помогает, либо вы или кому-то еще. Ваше здоровье!

Другие советы

Включите путь показывает, где PHP будет искать сценарии, которые он собирается включить - так что, когда вы говорите include('blah.php') PHP двигатель будет искать blah.php во всех путях в включении пути.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top