PHP使用类

时间:2015-05-04 03:41:30

标签: php oop model-view-controller

我正在开发一个MVC框架,我在声明帮助类时制作灵活的代码/结构存在问题

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>;

我不能将摘要用于公共函数,但我已经看到了可以执行此操作的框架。

我希望有人有一个想法,有人可以理解我的问题,提前谢谢。

1 个答案:

答案 0 :(得分: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