2012-12-06 67 views
4

我正在學習代碼點火器。我遇到了這個超級對象。在codeigniter中使用超級對象的好處是什麼

代碼點火器具有加載類並將它們存儲在實例變量中的功能。每次我們需要包含一個新類或之前加載的類時,代碼點火器會首先在實例數組中搜索它,如果未找到,則加載它幷包含在instanc數組中。

我的問題是在類中,當我們可以通過load_class函數包含類(因爲這個函數首先在insntance數組中搜索,所以減少了一次又一次包含相同類的開銷),那麼需要聲明超類對象包括預定義或加載新類。

當我們可以做到這一點。

class CLASSNAME 
{ 
    function functionname() 
    { 
    $object = load_class(classname, location); 
    $object->callfunction(); 
    } 
} 

那麼,爲什麼我們要做這個

class CLASSNAME 
{ 
    function functionname() 
    { 
    $superobject = & get_instance(); 
    $superobject->classobject->function(); 
    } 
} 

只是想知道使用超級對象的利益。只是包括所有預定義的對象,或者是我無法理解的更深入和有益的東西。

在此先感謝。

+0

您使用已存在的對象而不是重複它們。應該加快速度,因爲你不會有重複的數據。 –

+0

是的,這就是我想知道的超級對象的好處。這是(爲每個類使用現有的定義對象,而不是新的,以便每個類只有一個對象)唯一的好處,或者還有更多的好處。如果我沒有錯,那麼在「目標類」中定義一個新的對象來包含另一個「所需的類」是沒有問題的,因爲對象作用域保留在類範圍內。 –

回答

0

在你給出的例子中(如果你只需要一個庫引用) - 沒有任何好處。 get_instance()只是一個更常見的(和記錄)的功能,而load_class()只是供內部使用。

可能的好處是,get_instance()讓你訪問一切您的控制器有,例如,如果您要檢查控制器屬性,調用模型法等

+0

我想了解代碼點火器的內部工作。在那裏,我使用超級對象卡住了,並且有點迷惑,從我的理解中得到的是,代碼點火器團隊創建了超級對象的概念,以允許其用戶使用控制器定義類。而load_object是一個函數,用於初始化代碼點火器框架工作的主要類和重要類。 –

+0

因此,我得出的結論是,如果有人正在爲他們的網站創建一個小框架。因爲我正在創建,所以使用load_class概念我們可以做到這一點,並且不需要使用超級對象概念,就像對load_class的這個函數的一個小修改一樣,我們可以將它用於更廣泛的目的。謝謝 –

0

有時候,你需要有一個並繼承另一個類繼承。就像這樣:

class Car extends Garage { 
    // properties and functions 
} 

必須延伸CI_Controller加載庫,助手等

同時使用(擴展自己的類加載CodeIgniter的本地資源旁),可以使用超目的。舉個例子:

class Car extends Garage { 

    protected $CI; 

    // We'll use a constructor, as you can't directly call a function 
    // from a property definition. 
    public function __construct() 
    { 
      // Assign the CodeIgniter super-object 
      $this->CI =& get_instance(); 
    } 

    public function foo() 
    { 
      $this->CI->load->helper('url'); 
      redirect(); 
    } 

    public function bar() 
    { 
      $this->CI->config->item('base_url'); 
    } 
} 

here

在某些情況下,你可能想發展,從你的控制器而存在,但必須利用所有CodeIgniter的資源的能力類。這很容易,你會看到。

相關問題