PHP: Require () и иерархии классов - PullRequest
1 голос
/ 19 ноября 2010

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

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

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

1 голос
/ 19 ноября 2010

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

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

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

...