PHP以类为值提取数组
Posted
技术标签:
【中文标题】PHP以类为值提取数组【英文标题】:PHP Extracting array with class as value 【发布时间】: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>;
我不能将提取物用于公共功能,但我已经看到可以做到这一点的框架。
我希望有人有一个想法,并且有人能理解我的问题,在此先感谢。
【问题讨论】:
【参考方案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::$helper
和Controller::load_helper()
在我的理解中应该是private
或protected
而不是public
。
【讨论】:
谢谢先生。我不习惯使用魔术方法,但这确实对我有帮助以上是关于PHP以类为值提取数组的主要内容,如果未能解决你的问题,请参考以下文章