2011-03-07 74 views
0

在下面的代碼中,我必須使用$ module = $ this-> uri-> segment(4);; table =「omc _」。$ module;和$ id = $ this-> uri-> segment(5);在這個班的每個功能。如何避免重複變量?

我該如何避免這種重複?

在此先感謝。

class Admin extends Shop_Admin_Controller { 
    function Admin(){ 
    parent::Shop_Admin_Controller(); 
    } 

    function changeStatus(){ 
     $module = $this->uri->segment(4); 
     $table = "omc_".$module; 
     $id = $this->uri->segment(5); 

     if($id && $table){ 
      $this->MKaimonokago->changeStatus($table,$id); 
     } 
     flashMsg('success',$this->lang->line('kaimonokago_status_changed')); 
     redirect("$module/admin/index/","refresh"); 
    } 
................. 
................. 

回答

1

你可以簡單地添加,然後爲實例(即:一流水平)的變量適當visibility(保護或私有),然後您的構造函數中初始化它們。

通過這樣做,您不需要在每種方法中初始化它們,並且仍然會有一個更方便的命名機制。

例如:

class Admin extends Shop_Admin_Controller { 

    private $module; 
    private $table; 
    private $id; 

    public function __construct() { 

     parent::__construct(); 

     // Initialise uri class here, unless this is done 
     // in the parent constructor. 

     $this->module = $this->uri->segment(4); 
     $this->table = "omc_".$module; 
     $this->id = $this->uri->segment(5); 
    } 


    public function changeStatus() { 

     if($this->id && $this->table) { 
      ... 
     } 

    } 
} 

順便說一句,我也建議設置你的方法適當的知名度,當然,除非你的目標PHP 4,在這種情況下,與「VAR取代「私人」 「在上面的例子中,並從方法中刪除可見性屬性。

1

如何在構造函數中設置它們?

function Admin(){ 
    parent::Shop_Admin_Controller(); 
    $this->module = $this->uri->segment(4); 
    $this->table = "omc_" . $this->module; 
    $this->id = $this->uri->segment(5); 
} 

然後它們可以用作例如, $this->module在你班上的其他功能。

這當然假設你沒有在父類中具有這些名稱的屬性。如果你這樣做,你使用不同的名字。

0

也許將它們設置爲構造函數中的受保護屬性?

class Admin 
{ 
    protected $_module; 
    protected $_table; 
    protected $_id; 
    public function __construct() 
    { 
     // do something that initializes $this->uri; 
     $this->_module = $this->uri->segment(4); 
     $this->_table = 'omc_' . $module; 
     $this->_id = $this->uri->segment(5); 
    } 
}