当前位置: 首页 > news >正文

广东省住房及建设厅官方网站/应用商店优化

广东省住房及建设厅官方网站,应用商店优化,南京网站公司,应用公园app手机版下载php中文网最新课程每日17点准时技术干货分享ThinkPHP 的 Container 类提供了静态方法 get() ,可以根据类名或类的别名获取实例,会保持创建完成的实例,避免重复创建。下面实现这个方法,修改 Container.php ,添加以下代码…
3dbe566bb7a953dea9dbd97c1bc7651e.png

php中文网最新课程

每日17点准时技术干货分享

49eb97f429c807b3d9f90d51332d4ed6.png

ebade7c67fbfcad266d0f882adefdb11.gif

ThinkPHP 的 Container 类提供了静态方法 get() ,可以根据类名或类的别名获取实例,会保持创建完成的实例,避免重复创建。

下面实现这个方法,修改 Container.php ,添加以下代码。

//     * ThinkPHP 5 与 6 在此处参数一致//     * @param string $abstract//     * @param array $vars//     * @param bool $newInstance//     */    public static function get(string $abstract, array $vars = [], bool $newInstance = false){        return static::getInstance()->make($abstract, $vars, $newInstance);    }

编写 getInstance() 方法,并新增静态属性 $instance 保存自身实例。

protected static $instance;public static function getInstance(){        // 创建自身实例        if (is_null(static::$instance)) {            static::$instance = new static;        }        return static::$instance;    }

编写 make() 方法。

public function make (string $abstract, array $vars = [], bool $newInstance = false){        // 这里的 $abstract 是包含有命名空间的类名        if (isset($this->bind[$abstract])) {            $abstract = $this->bind[$abstract];        }        // 如果已经实例化直接返回        if (isset($this->instances[$abstract]) && !$newInstance) {            return $this->instances[$abstract];        }        // 如果就创建        $object = $this->invokeClass($abstract, $vars);        // 保存实例        if (!$newInstance) {        $this->instances[$abstract] = $object;        }        return $object;    }

创建保存属性的别名数组 $bind

protected $bind = [        'app' => App::class,        'config' => Config::class,        'request' => Request::class    ];

编写 invokeClass() 方法

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

修改入口文件 index.php

require __DIR__ . '/../core/base.php';use think\Request;$req = \think\Container::get('request');var_dump($req instanceof Request);

输出 bool(true) 表示 get() 方法功能正常。

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

public function __get($abstract){        // 返回容器的类实例        return $this->make($abstract);    }public function __set($abstract, $instance){        if (isset($this->bind[$abstract])) {            $abstract = $this->bind[$abstract];        }        // 装入容器        $this->instances[$abstract] = $instance;    }

index.php 进行测试

$container = \think\Container::getInstance();// 获取容器中的实例,输出对象var_dump($container->request);// 装入容器$container->contianerName = $container;var_dump($container->contianerName);

输出 object(think\Request) 表示成功。

1fd2edc38d3f9fca9dffcd0c53438da1.png

17e285379e464b4b1c5d27df427e140e.png

http://www.jmfq.cn/news/5204305.html

相关文章:

  • 网站建设柚子网络科技联系方式/百度投诉电话客服24小时
  • 做的网站手机打不开怎么回事啊/济南seo排名优化推广
  • erp软件是干嘛的/5g网络优化
  • 营销创意网站/目前病毒的最新情况
  • 社区网站建设公司/100个商业经典案例
  • 石家庄seo网络推广/优化大师客服电话
  • 求一个用脚做asmr的网站/关键词优化武汉
  • 是什么网站建设/福州网站开发公司
  • 手机企业网站设计理念/江苏网页定制
  • 网页美工设计教案/seo是什么级别
  • 湘潭网站建设 AA磐石网络/网站建设报价单
  • 企业品牌网站建设注意事项/seo网络贸易网站推广
  • 河南app软件开发/什么是seo文章
  • 公众号网站开发用什么模板/河北网站建设案例
  • 滕州市中远建设工程公司网站首页/免费广告发布平台
  • x网站免费/每日重大军事新闻
  • 网站转移 备案/哪个杭州seo好
  • 做动态网站怎么配置系统dsn/抖音seo关键词优化排名
  • 网站过期怎么办/外链平台
  • 大型网站seo方案/网络广告策划书
  • 常见的分类信息网站有哪些/seo搜索引擎优化服务
  • 我想看b站/独立站怎么搭建
  • 更换网站模板/山东百度推广代理
  • 汽车网站开发背景/广州seo托管
  • 最简单的网站怎么做/尚硅谷培训机构官网
  • 电商网站开发重难点/数据分析系统
  • 莆田网站建设公司/天津百度推广排名优化
  • 做进化树的在线网站/百度seo 优化
  • 免费建设手机网站/seo项目培训
  • 邢台网站/黄冈网站推广优化找哪家