Почему я получаю эту ошибку после обновления CodeIgniter с версии от версии 1.1 до версии 2.1?
A PHP Error was encountered Severity: Notice Message: Undefined property: Site::$load Filename: libraries/Website.php Line Number: 25 Fatal error: Call to a member function library() on a non-object in C:\xampp\htdocs\travel\application\libraries\Website.php on line 25
Библиотечное приложение / библиотека / веб-сайт
class Website extends CI_Controller { public static $current_city; public function __construct() { $this->load->library('language'); // line 25 $this->language->loadLanguage(); $this->load_main_lang_file(); $this->load_visitor_geographical_data(); $this->load->library('bread_crumb'); } }
Вы забыли называть метод __construct класса CI_Controller :
public function __construct() { // Call CI_Controller construct method first. parent::__construct(); $this->load->library('language'); // line 25 $this->language->loadLanguage(); $this->load_main_lang_file(); $this->load_visitor_geographical_data(); $this->load->library('bread_crumb'); }
Примечание. Если вы создаете контроллер, его следует поместить в application/controllers/ , а не в application/libraries/ .
Если класс child (inheritor) имеет конструктор, родительский конструктор не будет вызываться, потому что вы переопределите конструктор родителя с дочерним, если вы явно не вызываете конструктор parent::__construct(); используя parent::__construct(); , Это концепция полиморфизма в объектно-ориентированном программировании
Если вы не вызываете parent::__construct(); когда контроллер приложения инициализируется, вы потеряете класс Loader и Core а $this->load никогда не будет работать.
Использование parent::__construct(); необходимо, только если вы хотите объявить __construct() в своем контроллере, который будет переопределять родительский.
Это верно и для моделей, но с использованием parent::__construct(); в вашей модели только регистрирует отладочное сообщение Model Class Initialized , поэтому, если вам нужно знать, когда модель инициализирована (в журналах) , продолжайте использовать это, если нет, игнорируйте ее.