iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHPLaravel门面的实现原理详解
  • 663
分享到

PHPLaravel门面的实现原理详解

PHPLaravel门面原理Laravel门面原理Laravel门面 2023-02-09 12:02:00 663人浏览 泡泡鱼
摘要

目录环境原理环境 Laravel 5.4 原理 在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可

环境

Laravel 5.4

原理

在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可以直接通过静态接口调用这些类中的方法。

下面我们先看看一个门面类是怎么定义的:

<?PHP

namespace App\Facades;

use Illuminate\Support\Facades\Facade;

class Player extends Facade
{

    protected static function getFacadeAccessor() {
        return 'player';
    }

}

门面类都继承自Illuminate\Support\Facades\Facade父类,这个父类中有一个魔术方法:


    public static function __callStatic($method, $args)
    {
        $instance = static::getFacadeRoot();

        if (! $instance) {
            throw new RuntimeException('A facade root has not been set.');
        }

        return $instance->$method(...$args);
    }

当我们静态调用一个不存在的方法时,例如Player::playOneSong(),这个魔术方法就会被调用。它通过getFacadeRoot()方法创建出一个对象,然后在这个对象上真正执行我们的方法。

再看看getFacadeRoot()方法:

    
    public static function getFacadeRoot()
    {
        return static::resolveFacadeInstance(static::getFacadeAccessor());
    }

这里通过我们自定义门面类中的getFacadeAccessor方法,获取到一个service_id(暂且这么叫吧),然后传给resolveFacadeInstance方法。

再往下看resolveFacadeInstance方法:

    
    protected static function resolveFacadeInstance($name)
    {
        if (is_object($name)) {
            return $name;
        }

        if (isset(static::$resolvedInstance[$name])) {
            return static::$resolvedInstance[$name];
        }

        return static::$resolvedInstance[$name] = static::$app[$name];
    }

通过static::$app[$name]从服务容器中获取 key 为name的对象,服务容器会帮我们实例化出对应的对象(前提是已经绑定好)。

服务容器$app是一个对象,但它实现了ArrayAccess接口,所以可以用这种数组的方式访问。

获取到对象后,放入到static::$resolvedInstance静态变量中,这样下次再获取相同对象时,就不用重复实例化了。

到此这篇关于php Laravel门面的实现原理详解的文章就介绍到这了,更多相关PHP Laravel门面内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: PHPLaravel门面的实现原理详解

本文链接: https://www.lsjlt.com/news/195332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHPLaravel门面的实现原理详解
    目录环境原理环境 Laravel 5.4 原理 在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可...
    99+
    2023-02-09
    PHP Laravel门面原理 Laravel门面原理 Laravel门面
  • Laravel门面实现原理
    环境 Laravel 5.4 原理 在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可以直接通过静态接口调用这些类中的方法。 下面我们先看看...
    99+
    2023-09-01
    laravel php
  • PHPLaravel框架异步执行的实现详解
    目录Laravel 异步执行任务大致操作代码粘贴其他操作Laravel 异步执行任务 不影响当前程序继续执行 描述:用户操作时 要执行计算量大且不影响主操作的任务时,可采用异步方式执...
    99+
    2024-04-02
  • JavaScript面试Module Federation实现原理详解
    目录基本概念1、什么是 Module Federation?2、Module Federation核心概念3、使用案例4、插件配置工作原理1、使用MF后在构建上有什么不同?2、如何加...
    99+
    2024-04-02
  • JavaAQS的实现原理详解
    目录使用lockSyncacquireNonfairSync.tryAcquireFairSync.tryAcquireacquireQueuedacquireQueuedunloc...
    99+
    2023-05-14
    Java AQS原理 Java AQS实现 Java AQS
  • 详解Feign的实现原理
    目录一、什么是Feign二、为什么用Feign三、实例3.1、原生使用方式3.2、结合 Spring Cloud 使用方式四、探索Feign五、总结一、什么是Feign Feign ...
    99+
    2024-04-02
  • 详解Java Synchronized的实现原理
    目录SynchronizedSynchronized的使用方式Synchronized的底层实现1.Java对象头2.Monitor3.线程状态流转在Monitor上体现Synchr...
    99+
    2024-04-02
  • 详解C# ConcurrentBag的实现原理
    目录一、ConcurrentBag类二、 ConcurrentBag线程安全实现原理2.1、ConcurrentBag的私有字段2.2、用于数据存储的ThreadLocalList类...
    99+
    2024-04-02
  • 详解Java面向对象之多态的原理与实现
    目录何为多态代码实现多态理解何为多态 定义: 多态是指不同的子类在继承父类后分别都重写覆盖了父类的方法,即父类同一个方法,在继承的子类中表现出不同的形式。系统在运行时(而非编译时),...
    99+
    2024-04-02
  • C++中function的实现原理详解
    目录前言自己实现function前言 类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操...
    99+
    2022-12-09
    C++ function实现原理 C++ function原理 C++ function
  • OpenMP Parallel Construct的实现原理详解
    目录Parallel 分析——编译器角度深入剖析 Parallel 动态库函数参数传递动态库函数分析参数传递分析汇编程序分析GOMP_parallel_sta...
    99+
    2023-01-28
    OpenMP Parallel Construct原理 OpenMP Parallel Construct源码 OpenMP Parallel Construct
  • java的Builder原理和实现详解
    首先给一个简单的Builder设计模式的例子: 主实现类代码如下: public class CompanyClient { public String company...
    99+
    2024-04-02
  • Synchronized的底层实现原理(原理解析,面试必备)
    synchronized 一. synchronized解读 1.1 简单描述 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized 翻译为中文的意思是同步,也称之为同步锁。 synchronize...
    99+
    2023-08-19
    面试 java jvm
  • JSONWebToken(JWT)原理入门教程详解
    目录一、跨域认证的问题二、JWT 的原理三、JWT 的数据结构3.1 Header3.2 Payload3.3 Signature3.4 Base64URL四、JWT 的使用方式五、...
    99+
    2024-04-02
  • 详解hibernate4基本实现原理
    整体流程通过configuration来读cfg.xml文件得到SessionFactory工厂通过SessionFactory工厂来创建Session实例通过Session打开事务通过session的api操作数据库事务提交关闭连接说明:...
    99+
    2023-05-31
    hibernate4 原理 te
  • 详解App保活实现原理
    目录概述保活的底层技术原理实现方法改进空间如何在 native 层进行 binder 通信如何应对系统如何应对用户如何应对总结概述 早期的 Android 系统不完善,导致 App ...
    99+
    2024-04-02
  • Java NIO Buffer实现原理详解
    目录1、Buffer的继承体系2、Buffer的操作API使用案例3、Buffer的基本原理4、allocate方法初始化一个指定容量大小的缓冲区5、slice方法缓冲区分片6、只读...
    99+
    2024-04-02
  • PHP实现LRU算法的原理详解
    1.概念 LRU : 最近最少使用算法 2.代码 <php class Node { public $preKey = null; //链表前一个节点 publ...
    99+
    2024-04-02
  • VUE响应式原理的实现详解
    目录总结前言 相信vue学习者都会发现,vue使用起来上手非常方便,例如双向绑定机制,让我们实现视图、数据层的快速同步,但双向绑定机制实现的核心数据响应的原理是怎么样的呢,接下来让我...
    99+
    2024-04-02
  • 线程池的原理与实现详解
    一. 线程池的简介通常我们使用多线程的方式是,需要时创建一个新的线程,在这个线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需求,毕竟我们并不是什么...
    99+
    2022-11-15
    线程池 原理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作