PHP: require () и иерархии классов

Я рассматриваю этот вопрос в основном как программист на C ++ / C #, который может помочь взглянуть на вещи. Мне не удалось найти простой ответ на мой вопрос, поэтому я приношу свои извинения, если есть один доступный там. Кажется, это будет очень распространенная проблема.

Предположим, что у меня есть класс A , который является контейнером для экземпляров класса B. класс B , в свою очередь, является контейнером для экземпляров класса C. В контейнере я имею в виду, что каждый класс содержит массив определенных типов объектов и несколько общих параметров, описывающих эти объекты. Каждый класс хранится в [className] .php

Теперь у меня есть скрипт, который должен создать экземпляр класса A. Для этого ему нужно будет создать экземпляры класса C. Каждый набор из них будет использоваться для создания экземпляра класса B и, наконец, все классы Bs будут использоваться для создания экземпляра класса A.

Вопрос в PHP, где находится наилучшее место с наименьшей ошибкой для размещения операторов require ()? Некоторые идеи:

  • require () все три класса в скрипте, и нигде больше
  • require_once () классы везде, где вам нужно их использовать. В этом случае вы должны требовать в сценарии require_once () A, B и C, требовать B и C в A и require_once () C в B.
  • require () только класс следующего уровня вниз в иерархии. Для сценария потребуется (A), для этого требуется A (B), а B потребуется (C). Таким образом, требуя A в скрипте, вы получаете доступ ко всем классам, необходимым для заполнения A.
  • Что-то еще, например, автозагрузка.

Как всегда, я ценю идеи. Хотя это может быть субъективным на каком-то уровне, я верю, что некоторые способы могут быть объективно лучше других, и это то, что мне нужно.

Solutions Collecting From Web of "PHP: require () и иерархии классов"

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

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

В любом случае. Это в основном выбор стиля.

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