CI 2.x удалил всю совместимость с PHP4, а также обновил ряд стандартов, чтобы соответствовать PHP 5.3 в будущем. Одним из них является проблема конструктора, с которой вы столкнулись. Начиная с PHP 5.3, функция ClassName()
больше не является конструктором для класса, это просто другая функция. Вы должны явно объявить функцию __construct
для выполнения любых задач, которые необходимо выполнить при создании нового экземпляра класса. Учитывая это, вы должны видеть, что больше не имеет смысла вызывать parent::ClassName()
в вашем дочернем конструкторе, так как эта функция больше не будет конструктором родителя.
Еще одна ловушка, с которой мне недавно пришлось столкнуться - это способ обработки массива $_GET
. В версиях 1.x вы могли использовать строки запроса для передачи дополнительной информации и при этом использовать сегменты URI для маршрутизации к контроллерам и функциям. Это особенно полезно для вызовов AJAX, когда вы не всегда знаете все параметры, отправляемые на сервер и с сервера в конкретном запросе. В версиях 2.x файл config.php содержит новую опцию $config['allow_get_array']
. Это должно быть установлено в TRUE
, если вы хотите использовать строки запроса, в противном случае входной класс очищает массив $_GET
как часть процедуры инициализации CI при каждом запросе.
Что-то, что не является подводным камнем, но может оказаться полезным, - это новые опции в config / autoload.php, которые позволяют вам добавлять новые каталоги приложений в ваш проект. Если вы работаете с несколькими различными проектами с помощью CI и хотите хранить любые полезные библиотеки, которые вы пишете, в одном месте, теперь вы можете добавить это местоположение в $autoload['packages']
. CI ожидает, что любой путь в этом массиве будет содержать подкаталоги «контроллеры», «модели», «библиотеки» и «помощники». Он не будет жаловаться, если у вас нет этих каталогов, но они, по крайней мере, понадобятся вам для всего, что вы собираетесь загрузить, то есть библиотеки будут находиться в / библиотеки, как и в основной папке приложения.