2015-05-04 72 views
6

即时通讯开发一个MVC框架,我有在声明辅助类作出灵活的代码/结构问题PHP提取阵列类为价值

class Controller { 
    public $helper = []; 

    public function load_helper($helper) { 
     require_once(DIR_HELPER . $helper . '.php'); 
     $lc_helper = StrToLower($helper); 
     $helper_arr[$lc_helper] = new $helper; 
     $this->helper[$lc_helper] = $helper_arr[$lc_helper];  
    } 
} 

//调用林这样

在我的控制器功能
Class Home Extends Controller { 

    $this->load_helper('Form'); 

    $this->helper['form']-><class function>; 
} 

我想这样调用该函数:

$this->form-><class function>; 

我不能使用提取物公共职能,但我见过可以做到的框架。 我希望有人有一个想法,并有人可以理解我的问题,在此先感谢。

回答

5

看看魔术__get的方法。从文档:

PHP中的重载提供了动态“创建”属性 和方法的方法。这些动态实体通过魔术方法 进行处理,人们可以在类中为各种动作类型建立。

的重载方法是我与尚未宣布或不在当前 范围可见性 或方法进行交互时nvoked。本部分的其余部分将使用术语 “不可访问的属性”和“不可访问的方法”来引用此声明和可见性的 组合。

实现这一点的例如是这样的:

class Controller { 
    public $helper = []; 

    public function load_helper($helper) { 
     require_once(DIR_HELPER . $helper . '.php'); 
     $lc_helper = StrToLower($helper); 
     $helper_arr[$lc_helper] = new $helper; 
     $this->helper[$lc_helper] = $helper_arr[$lc_helper];  
    } 

    public function __get($property) { 
     //Load helper if not exists 
     if (!isset($this->helper[$property])) { 
      $this->load_helper($property); 
     } 

     //Return the helper 
     return $this->helper[$property]; 
    } 
} 

旁注:

Controller::$helperController::load_helper()在我的理解应该是privateprotected代替public

+1

谢谢先生。我没有使用魔术方法,但这真的帮了我 – mendz