Автозагрузка из файла с несколькими классами

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

в настоящее время:

|/module
|-Smallclass1.php
|-Smallclass2.php
|-Smallclass3.php
|-Normalclass.php

после:

|/module
|-module.php  <-- smallclasses go here
|-Normalclass.php

Теперь идут дебаты. Чтобы автоматически загрузить один «SmallclassX», я подумал проверить, существует ли файл SmallclassX.php, если не проверить, существует ли module.php, и если да, проверить, существует ли класс внутри файл и включить его. Включение всего файла module.php, когда мне нужен один класс, кажется накладным, особенно если файл содержит много классов. Здесь предлагают использовать токены для проверки существования класса, но я не уверен в его эффективности, после этого я Мне нужен метод для включения только нужного мне класса.

Как вы думаете, если я смогу загрузить только тот класс, который мне нужен, как я уже упоминал, не будет ли это также накладными расходами из-за чтения файла более одного раза и просмотра внутри, чтобы включить фрагмент кода, который я хочу?


person olanod    schedule 17.10.2012    source источник
comment
Я не знаю, но это просто пахнет. Я не могу представить себе ситуацию, когда потребовалось бы такое решение.   -  person Dennis Haarbrink    schedule 17.10.2012
comment
я не думаю, что это отличная идея   -  person Peter Porfy    schedule 17.10.2012


Ответы (1)


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

Однако я бы посоветовал вам сравнить это решение. Будет ли это более эффективно, будет зависеть от задержки доступа к файлам (APC) и стоимости синтаксического анализа и включения каждого класса по отдельности.

Я также соглашусь с другими комментариями, это может сбивать с толку, что у вас есть две отдельные схемы для включения классов, и APC в любом случае устранит большую часть стоимости наличия отдельных файлов.

person MatsLindh    schedule 17.10.2012