我怎样才能避免重复变量?

时间:2011-03-07 17:14:52

标签: php oop

在下面的代码中,我必须使用$ 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");
    } 
 .................
 .................

3 个答案:

答案 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);
    }
}