У меня есть класс в марионетке, если у меня есть следующий код:
class A {
require B
....
}
Я получаю ошибку циклических зависимостей. Если бы у меня был:
class A {
include B
....
}
все работает нормально
На самом деле это очень разные вещи. Сказать require B
средства B
должен прийти раньше A
(и, следовательно, может привести к циклическим зависимостям, если что-то в B
оказывается require A
). И если B
не включен вообще, это приведет к ошибке отсутствия зависимостей.
С другой стороны, include B
просто говорит B
будет применяться всякий раз, когда A
применяется: в нем ничего не говорится о порядке между ними.
Об этом только что спросили (и ответили) в списке рассылки марионеток:
Разница очевидна, когда необходимо применить каталог. С помощью include вы оценили его содержимое во время включения, но любые ресурсы должны явно зависеть от включения. С требованием - зависимость создается для вас - но вы должны быть осторожны и убедиться, что это ваш желаемый результат
- Кен Барбер в Требовать против включения?