2011-03-07 143 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); 
    } 
}