使用容器类实现ThinkPHP核心框架的方法

  介绍

这篇文章给大家分享的是有关使用容器类实现ThinkPHP核心框架的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

ThinkPHP的<代码> 容器类提供了静态方法<代码>(),可以根据类名或类的别名获取实例,会保持创建完成的实例,避免重复创建。下面实现这个方法,修改<代码>容器。php代码> //,,,,,*,ThinkPHP  5,与,6,在此处参数一致//,,,,,*,@param  string 美元文摘//,,,,,*,@param  array  $ var//,,,,, *, @param  bool  newInstance美元//,,,,*/,,,public  static  function  (string 抽象,美元,array  vars 美元;=,[],,bool  newInstance 美元;=,假)   ,,,{   ,,,,,,,return 静态:getInstance()→使(抽象,美元,$ var, newInstance美元);   ,,,}

编写<代码> getInstance() 方法,并新增静态属性<代码> protected  static 实例美元;public  static  function  getInstance ()   ,,,{   ,,,,,,,//,创建自身实例   ,,,,,,,if  (is_null(静态:实例)美元),{   ,,,,,,,,,,,静态::$ instance =, new 静态;   ,,,,,,,}   ,,,,,,,return 静态::$实例;   ,,,}

编写<代码>使()方法。

public  function  make  (string 抽象,美元,array  vars 美元;=,[],,bool  newInstance 美元;=,假)   ,,,{   ,,,,,,,//,这里的,abstract 美元;是包含有命名空间的类名   ,,,,,,,if (收取($ this→绑定[摘要]美元)),{   ,,,,,,,,,,,abstract 美元;=,这→美元绑定[摘要]美元;   ,,,,,,,}      ,,,,,,,//,如果已经实例化直接返回   ,,,,,,,if (收取($ this→实例[摘要]美元),,,,! newInstance美元),{   ,,,,,,,,,,,return  $ this→实例[摘要]美元;   ,,,,,,,}      ,,,,,,,//,如果就创建   ,,,,,,,object 美元;=,$ this→invokeClass($文摘,,$ var);      ,,,,,,,//,保存实例   ,,,,,,,if  (! $ newInstance), {   ,,,,,,,这个→美元实例[摘要]美元,=,美元的对象;   ,,,,,,,}      ,,,,,,,return 美元对象;   ,,,}

创建保存属性的别名数组绑定美元<代码>

,,,,protected  bind 美元;=,(   ,,,,,,,& # 39;应用# 39;,=祝辞,应用::类,   ,,,,,,,& # 39;配置# 39;,=祝辞,配置::类,   ,,,,,,,& # 39;请求# 39;,=祝辞;要求::类   ,,,,

编写<代码> invokeClass() 方法

public  function  invokeClass  (string 类,美元,array  vars 美元;=,[])   ,,,{   ,,,,,,,//,vars 美元;为构造函数的参数   ,,,,,,,return  new 美元类();   ,,,}

修改入口文件<代码>索引。php代码

require  __DIR__ 只& # 39;/. ./核心/base.php& # 39;; use 认为\请求;req 美元;=,\ \容器::获得(& # 39;请求# 39;);var_dump (req 美元;instanceof 请求);

输出bool(真正的)表示<代码>得到()方法功能正常。

也可以利用魔术方法<代码> __get() 和<代码> __set() ,实现外部对象直接操作容器实例。

,,,,public  function  __get(抽象)   ,,,{   ,,,,,,,//,返回容器的类实例   ,,,,,,,return  $ this→使(文摘美元);   ,,,}public  function  __set(抽象,美元,美元实例)   ,,,{   ,,,,,,,if (收取($ this→绑定[摘要]美元)),{   ,,,,,,,,,,,abstract 美元;=,这→美元绑定[摘要]美元;   null   null   null   null

使用容器类实现ThinkPHP核心框架的方法