*
Как видно из названия, возникает такой тип ошибки, когда вы, скорее всего, пытаетесь перебрать или найти значение из массива с не- существующий ключ.
Считаем, что вы пытаетесь показать каждую букву из $string
$string = 'ABCD';
for ($i=0, $len = strlen($string); $i <= $len; $i++){
echo "$string[$i] \n";
}
. Вышеприведенный пример сгенерирует ( онлайн-демонстрацию ):
A
B
C
D
Notice: Uninitialized string offset: 4 in XXX on line X
И, как только скрипт заканчивается эхом D
, вы получите ошибку, потому что внутри цикла for()
вы сказали PHP, чтобы показать вам от первого до пятого символа строки из 'ABCD'
Что, существует, но поскольку цикл начинает отсчитываться от 0
и эха D
к моменту достижения значения 4
, он выдает ошибку смещения.
Аналогичные ошибки:
Это хорошее упражнение - написать свой собственный, но в конце вы можете использовать существующий контейнер. Вы можете начать с этого одного в 15 строках кода.
Кто-то написал один на C #: http://ninject.org/ .
Это с открытым исходным кодом, так что вы можете получить код и посмотреть, как этот парень сделал это.
Если нет очень серьезное основание, я не пошел бы, перестраивают колесо и реализуют контейнер МОК сам, особенно потому что существует, много хороших вариантов как Единица , Ninject или Spring.net .
, Если необходимо удалить зависимость к какому-либо из этих контейнеров МОК, можно испытать интерфейс Common Service Locator .
Я написал Контейнер IoC / DI на c #, который реализует Common Service Locator. Я написал это в основном для учебных целей, но когда я закончил, я решил сделать его открытым исходным кодом. Если кто-то из вас захочет попробовать IInject , он может скачать здесь .
Джеймс Ковач представляет эпизод dnrTV на эту тему здесь . Вот также написал статью . Однако в статье он упоминает, что вы, вероятно, захотите использовать один из готовых. Так как их очень много. Ninject, StructureMap, Autofac используют свободный интерфейс. Spring, Castle Windsor и Unity более ориентированы на XML-конфигурацию. Замок Виндзор также может использовать Бу в качестве интерфейса. У многих есть привязки к другим фреймворкам, таким как Unity для EntLib или Castle Windsor для Monorail и остальная часть проекта Castle.
Итак, если вам действительно не нужно или не нужно что-то, что не предоставлено доступными структурами МОК, то почему бы не использовать одну из них.
Айенде также написал о написании собственного контейнера IoC в своем посте в блоге . Создание контейнера IoC из 15 строк кода , я думаю, что он придерживается того же мнения, что и все остальные: не создавайте свой, если вам не нужно.
Контейнер IOC написать несложно, это просто хорошо управляемая глобальная рекурсивная фабрика с некоторыми потенциальными дополнительными функциями. Использование словаря, отражения и делегата для регистрации и построения простого контейнера ...
Реальный вопрос заключается в том, почему и как еще одна новая контейнерная структура МОК может принести пользу?
В большинстве случаев вы думаете, что вам нужно больше производительности? несуществующие функции? Но в большинстве случаев существующие фреймворки - это именно то, что вам нужно и достаточно, если только вы не осознаете всю бессмыслицу, которую фреймворк заставил вас использовать,
обладает силой разочаровываться всеми реализациями фреймворка ioc-контейнера, имеет особенности, имеющие порядок антипаттерна, но также причудливые и ненадежные синтаксисы и, что еще хуже, навязанных навязанных соединений, я решил сам испытать это , Вот почему я сделал свой собственный (очень легкий) контейнер IOC в качестве открытого источника.
Вы можете проверить это здесь: Puresharp API .net 4.5.2+
Мне понравилась реализация этого 33-строчного контейнера от Кена Эгози, вдохновленная 15 вкладышем Айенде