在下面的代码中,我必须使用$ 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");
}
.................
.................
答案 0 :(得分:1)
如何在构造函数中设置它们?
function Admin(){
parent::Shop_Admin_Controller();
$this->module = $this->uri->segment(4);
$this->table = "omc_" . $this->module;
$this->id = $this->uri->segment(5);
}
然后它们可以用作例如{class>}在您班级的其他功能中。
这当然假定您在父类中没有具有这些名称的属性。如果这样做,则使用不同的名称。
答案 1 :(得分:1)
您可以简单地将then作为实例(即:类级别)变量添加到适当的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,在这种情况下,在上面的示例中将“private”替换为“var”,并从中删除可见性属性方法。
答案 2 :(得分: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);
}
}