【问题标题】:PHP Extracting array with class as valuePHP以类为值提取数组
【发布时间】:2015-07-13 08:59:30
【问题描述】:

我正在开发一个 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>;

我不能将提取物用于公共功能,但我已经看到可以做到这一点的框架。

我希望有人有一个想法,并且有人能理解我的问题,在此先感谢。

【问题讨论】:

    标签: php oop model-view-controller


    【解决方案1】:

    看看神奇的__get 方法。来自文档:

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

    【讨论】:

    • 谢谢先生。我不习惯使用魔术方法,但这确实对我有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2015-05-17
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多