资讯专栏INFORMATION COLUMN

PHP Facades的实现

wuaiqiu / 3094人阅读

摘要:示例获得我获取根对象先加入服务容器创建类别名通过门面调用类方法其他魔术方法与方法简单理解和两个函数为一个类创建别名

示例

</>复制代码

  1. $method(...$args);
  2. }
  3. //获取Facade根对象
  4. public static function getFacadeRoot()
  5. {
  6. return static::resolveFacadeInstance(static::getFacadeAccessor());
  7. }
  8. protected static function resolveFacadeInstance($name){
  9. if(is_object($name)){
  10. return $name;
  11. }
  12. if (isset(static::$resolvedInstance[$name])) {
  13. return static::$resolvedInstance[$name];
  14. }
  15. return static::$resolvedInstance[$name] = static::$app[$name];
  16. }
  17. }
  18. class Router extends Facade{
  19. protected static function getFacadeAccessor(){
  20. return "router";
  21. }
  22. }
  23. class Container{
  24. public $binding;
  25. public function bind($name,$obj){
  26. $this->binding[$name] = $obj;
  27. }
  28. public function make($name,$args=[]){
  29. call_user_func_array($name, $args);
  30. }
  31. }
  32. //step1:先加入服务容器
  33. /*$container = new Facade;
  34. $container->bind("router",function(){
  35. return new RealRoute;
  36. })*/
  37. Router::$app["router"]=new RealRoute;
  38. //step2:创建类别名
  39. class_alias("Router","Route");
  40. //step3:通过门面调用类方法
  41. Route::get();
其他

PHP 魔术方法 __call 与 __callStatic 方法
简单理解call_user_func和call_user_func_array两个函数
class_alias--为一个类创建别名

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31713.html

相关文章

  • Laravel之Contracts和Facades

    摘要:而这些通用的接口已经由为你设计好了。作为在服务容器内基类的静态代理。所有对的调用都会被转发到该类对象下。在注册类在注册自定义的别名使用测试去查看输出 Contracts Contracts其实就是倡导面向接口编程,来达到解耦的目的。而这些通用的接口已经由Laravel为你设计好了。就是这些Contracts.那么Laravel如何知道我们需要使用哪个实现呢?在Laravel默认的Con...

    CoorChice 评论0 收藏0
  • Laravel 创建自己 Facade

    摘要:使用现在,在任何一个控制器,或者路由的回调函数中,使用你会发现,已经可以好好工作了,参考文章设计模式九外观模式结构型服务容器实例教程深入理解控制反转和依赖注入服务提供者实例教程创建测试实例 我的博客原文: http://www.qinblog.net/Articl... 前言 laravel 提供了一个灵活的模式,那就是 facade 。框架内部的 DB、Auth、File 等功能也...

    K_B_Z 评论0 收藏0
  • 走过,路过,快来看看laravel设计模式好文章汇总!

    摘要:中用到了很多设计模式,实现这些设计模式时也用到了不少新特性。学会之后可以把设计模式的思想应用在我们的程序中。实际上是服务容器中那些底层类的静态代理,相比于传统的静态方法,在提供了简洁且丰富的语法同时,还带来了更好的可测试性和扩展性。 laravel中用到了很多设计模式,实现这些设计模式时也用到了不少php新特性。学习这些设计模式,可以帮助我们: 学习php新特性,知道如何用新特性,写...

    2i18ns 评论0 收藏0
  • Laravel框架门面Facade源码分析

    摘要:容器主要的作用就是生产各种零件,就是提供各个服务。的原理我们以为例,来讲解一下门面的原理与实现。当运行时,发现门面没有静态函数,就会调用这个魔术函数。我们看到这个魔术函数做了两件事获得对象实例,利用对象调用函数。 前言 在开始之前,欢迎关注我自己的博客:www.leoyang90.cn这篇文章我们开始讲 laravel 框架中的门面 Facade,什么是门面呢?官方文档: Facade...

    wanghui 评论0 收藏0

发表评论

0条评论

wuaiqiu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<