Почему я получаю эту ошибку после обновления 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
, поэтому, если вам нужно знать, когда модель инициализирована (в журналах) , продолжайте использовать это, если нет, игнорируйте ее.