2013-08-19 58 views
0

爲什麼在將CodeIgniter從v1.7升級到v2.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'); 
    } 
} 

回答

2

你忘了打電話給CI_Controller__construct方法:

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/中。

如果孩子(繼承者)類有一個構造函數,父構造函數將不會被調用,因爲除非使用parent::__construct();顯式調用父構造函數,否則將使用子構造函數覆蓋父構造函數。這就是Polymorphismobject-oriented programming

概念如果不叫parent::__construct();當應用程序控制器初始化,你就會失去Loader and Core類和$this->load永遠不會起作用。

僅當您要在控制器中聲明__construct()方法時才需要使用parent::__construct();,它將覆蓋父級的方法。

這對車型也是如此,但使用parent::__construct();在模型中只記錄一條調試信息Model Class Initialized,所以如果你需要知道什麼時候模型是初始化(原木),繼續使用,如果沒有,管它。

相關問題