2010-10-08 88 views
0

這裏動態加載類是我的框架的基礎:全球接入(如笨呢)

class CPU { 

    public function load_class($class) { 
     include_once($class . ".php"); 
     $this->$class = new $class; 
    } 

    public function load_controller($class) { 
     include_once($class . ".php"); 
     $class = new $class; 
     $class->index(); 
    } 

    public function run() { 

     // Load DB class 
     $this->load_class("DB"); 

     // Load controller 
     $this->load_controller("About"); 
    } 
} 

class About extends CPU { 
    public function index() { 
     $this->DB->connect(); 
    } 
} 

run()被稱爲加載About類,訪問$DB,給出以下錯誤:

致命錯誤:調用一個非對象的成員函數connect()

我假設我需要使用一個單例來動態創建類。 CodeIgniter的工作原理是一樣的,但我無法弄清楚我需要做些什麼來修改我的框架才能完成這項工作?

+0

我在代碼中看不到任何對'run()'的調用。編輯:無視,我誤讀。設置'error_reporting(E_ALL);'。我假設模型和控制器與CPU不在同一個文件夾中,對吧? – mhitza 2010-10-09 01:58:11

回答

2

我建議使用__autoload()spl_autoload_register()加載你的類,而不是硬編碼include()。

關於你的問題,「關於」類沒有實例化數據庫的成員。它的父代CPU也沒有DB成員。換句話說,您可能希望DB成爲CPU或About的成員。不知道你在做什麼很難說。

即使您確實讓DB成爲其中的成員,您仍然必須將其添加到在load_controller()中實例化的About類的實例中。

換句話說,看起來你真的只是做錯了。該數據庫根本與「關於」無關。如果不知道你想要做什麼,很難給你更多的幫助。

關於使用單例,與任何東西無關。一個辛格爾頓只是你一直需要的一類。他們經常被濫用和濫用。謹慎使用!