2017-01-20 3 views
1

Я хотел бы сделать мои проекты настолько опасными, что можно просто скопировать + вставить их друг в друга.AutoLoader для неизвестных уровней проекта

Моя структура проекта - это имя проекта/(bin, config, lib).

После копирования + вставки у меня была бы цепочка, подобная ProjectName1/lib/ProjectName2/lib/ProjectName3 /.

Теперь было бы здорово, если Autoloader будет искать файлы в соответствии с уровнем, на котором был вызван файл.

Например, если класс внутри ProjectName1/lib/ProjectName2/lib/вызывает «новую конфигурацию», он должен получить конфигурационный файл, расположенный в ProjectName1/lib/ProjectName2/config/config.php.

(Но не тот, что указан в ProjectName1/config/config.php и не включен в ProjectName1/lib/ProjectName2/lib/ProjectName3/config/config.php).

Есть ли способ сделать это?

Редактировать: Имеет ли смысл делать файлы уникальными? Например: Если «config.php» был «ProjectName2Config.php», существует (почти) отсутствие конфликтов. Таким образом, автозагрузчик может искать везде и в конечном итоге найти файл.

Редактировать: У каждого проекта будет свой автозагрузчик, доступный для копирования и вставки. Однако я думал, что буду загружать только один для ProjectName1. Лучше ли загружать их все, чтобы каждый мог оставаться простым?

Приветствие, Peter

PS: Я только что вернулся из 3-х лет программирования перерыва. Я также счастлив, если вы скажете мне, что выше есть на самом деле плохая идея и дайте мне причину, почему :-)

+0

Просто напишите php-функцию, которая делает именно это, и зарегистрируйте его как автозагрузчик - просто поиграйте с ним. недостатком может быть то, что инструментам для кодирования будет сложно найти правильные классы, и вы можете, если структура станет достаточно грязной. (http://php.net/manual/en/function.spl-autoload-register.php) –

ответ

0

Я думаю, что это странный способ управлять вашими проектами. Где будет основной сценарий Project1 и Project2?

Например, то, что я делаю, я пишу это в моем index.php или главном проекте/Библиотека включает файл:

<?php define('ROOT_PATH', dirname(__FILE__) . '/'); ?> 

И я всегда использую этот ROOT_PATH как начало путей включения.

В вашем случае Project1 ROOT_PATH будет что-то вроде "/ вар/WWW/Проект1 /" и project2 ROOT_PATH будет "/ Var/WWW/Project1/Библиотека/Проект2 /"

Таким образом, новый Config в Проект1 и в Project2 будет использоваться собственный файл config.php.

+0

Спасибо. Это звучит хорошо, пока я не вернусь. Но скажу, что у меня есть: Project1 запускается ... $ project2 = new Project2; $ someValue = $ project2-> getSomeThing(); Проект1 продолжается .... новый SomeThingFromProject1(); В этом случае ROOT_PATH будет взято из Project2, верно? –

+0

Чтобы ответить на ваш вопрос: я намерен использовать Project2, как в примере, из другого edit: если я работаю над Project1 и может нуждаться в чем-то из Project2, я бы предпочел включить весь проект вместо того, чтобы копировать только ту часть, которая мне нужна. Надеюсь, что это проще в управлении, то есть когда Project2 будет обновлен в конце концов. Может быть, мне лучше использовать слово «пакет», а не «проект». –

+0

В случае с «пакетом» или «модулем», я понимаю. Тогда у меня будет проект с его библиотекой, модулями/пакетами (и другими вещами). И каждый модуль/пакет будет иметь свои собственные конфигурации, представления, контроллеры, sqls или что-то еще и будет независимым. – zenko