返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >Laravel门面实现原理
  • 347
分享到

Laravel门面实现原理

laravelphp 2023-09-01 07:09:05 347人浏览 泡泡鱼
摘要

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

环境

Laravel 5.4

原理

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

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

PHPnamespace 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静态变量中,这样下次再获取相同对象时,就不用重复实例化了。

来源地址:https://blog.csdn.net/ljfrocky/article/details/128944416

--结束END--

本文标题: Laravel门面实现原理

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

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

猜你喜欢
  • Laravel门面实现原理
    环境 Laravel 5.4 原理 在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可以直接通过静态接口调用这些类中的方法。 下面我们先看看...
    99+
    2023-09-01
    laravel php
  • PHPLaravel门面的实现原理详解
    目录环境原理环境 Laravel 5.4 原理 在Laravel中,门面为应用服务容器中绑定的类提供了一个“静态”接口,使得我们可以不用new这些类出来,就可...
    99+
    2023-02-09
    PHP Laravel门面原理 Laravel门面原理 Laravel门面
  • laravel要用门面的原因是什么
    本篇内容介绍了“laravel要用门面的原因是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在laravel中,因为门面能够为应用的服务...
    99+
    2023-06-30
  • laravel中间件实现原理是什么
    Laravel中间件实现原理是基于HTTP请求和响应的处理流程。中间件是一种过滤器,它可以在请求到达应用程序之前或之后进行处理。当一...
    99+
    2023-09-29
    laravel
  • camunda入门教程及实现原理
    1、camunda简介 介绍: Camunda是一种工作流引擎。 Camunda BPM 是一个轻量级、开源灵活的工作流框架,是由Java开发的一个纯Java库。它的核心是一个在Java虚拟机内部运行...
    99+
    2023-08-31
    java camunda
  • laravel门面指的是什么
    这篇文章将为大家详细讲解有关laravel门面指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在laravel中,门面是为应用服务容器中的绑定类提供的一个“静态”接口。维护时能够提供更加易于测试、...
    99+
    2023-06-29
  • laravel中间件的实现原理是什么
    Laravel中间件的实现原理是基于HTTP请求和响应的生命周期。当一个请求进入Laravel应用时,它会经过一系列的中间件,每个中...
    99+
    2023-09-21
    laravel
  • laravel中间件实现的原理是什么
    Laravel中间件的实现原理主要是基于HTTP请求和响应的概念。当客户端发起一个请求时,请求会先经过中间件,中间件对请求进行处理,...
    99+
    2024-03-04
    laravel
  • laravel门面的作用是什么
    这篇文章主要为大家展示了“laravel门面的作用是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“laravel门面的作用是什么”这篇文章吧。在laravel中,门面Facades用于为应用...
    99+
    2023-06-29
  • Tomcat中门面设计模式的原理
    这篇文章主要介绍“Tomcat中门面设计模式的原理”,在日常操作中,相信很多人在Tomcat中门面设计模式的原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Tomcat中门面设计模式的原理”的疑惑有所帮助!...
    99+
    2023-06-02
  • Synchronized的底层实现原理(原理解析,面试必备)
    synchronized 一. synchronized解读 1.1 简单描述 synchronized关键字解决的是多个线程之间访问资源的同步性,synchronized 翻译为中文的意思是同步,也称之为同步锁。 synchronize...
    99+
    2023-08-19
    面试 java jvm
  • JavaScript面试Module Federation实现原理详解
    目录基本概念1、什么是 Module Federation?2、Module Federation核心概念3、使用案例4、插件配置工作原理1、使用MF后在构建上有什么不同?2、如何加...
    99+
    2024-04-02
  • Laravel框架运行原理
    下文介绍Laravel框架运行原理,希望对大家有帮助。 使用任何框架,如果理解该框架原理,应用起来会更加得心应手。 一、生命周期 1. 入口文件: Laravel框架所有请求入口统一进入/public/i...
    99+
    2024-04-02
  • laravel中契约和门面有哪些区别
    今天小编给大家分享一下laravel中契约和门面有哪些区别的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。区别:1、契约是指框...
    99+
    2023-06-29
  • java门面模式怎么实现
    这篇文章主要介绍“java门面模式怎么实现”,在日常操作中,相信很多人在java门面模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java门面模式怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-19
  • Go面试题:锁的实现原理sync-mutex篇
    在Go中,主要实现了两种锁:sync.Mutex(互斥锁) 以及 sync.RWMutex(读写锁)。 本篇主要给大家介绍sync.Mutex的使用和实现原理。 文章目录 为什么需要锁在Go中...
    99+
    2023-10-01
    golang java 面试
  • Session实现原理
    HTTP协议 ( http://www.w3.org/Protocols/ )是“一次性单向”协议。 服务端不能主动连接客户端,只能被动等待并答复客户端请求。客户端连接服务端,发出一个HTTP Request,服务端处理请求,并且返回一个H...
    99+
    2023-06-03
  • 全面解析SpringBoot自动配置的实现原理
    之前一直在用SpringBoot框架,一直感觉SpringBoot框架自动配置的功能很强大,但是并没有明白它是怎么实现自动配置的,现在有空研究了一下,大概明白了SpringBoot框架是怎么实现自动配置的功能,我们编写一个最简单的自动配置功...
    99+
    2023-05-31
    spring boot 配置
  • Unity Sockect实现画面实时传输案例原理解析
    目录前言一、Socket通信原理二、画面传输设计 1.逻辑设计图2.Unity服务端3.Unity客户端4.最终效果前言 提示:这里可以添加本文要记录的大概内容: 例如:随...
    99+
    2024-04-02
  • scrapy入门学习(原理)
    什么是网络爬虫网络爬虫又称网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。如果有兴趣可查看百度百科网络爬虫网络蜘蛛(web spider)也叫网络爬虫,是一种'自动化浏览网络'的程序,或者说是...
    99+
    2023-01-30
    入门 原理 scrapy
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作