返回顶部
首页 > 资讯 > 精选 >laravel的核心实例分析
  • 101
分享到

laravel的核心实例分析

2023-06-29 12:06:17 101人浏览 安东尼
摘要

本文小编为大家详细介绍“laravel的核心实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“laravel的核心实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。laravel的核心是服务容器,也就是

本文小编为大家详细介绍“laravel的核心实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“laravel的核心实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

laravel的核心是服务容器,也就是ioc容器。该容器提供了整个框架中需要的一系列服务,其中包含了依赖注入和控制反转两部分,控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

本文操作环境:windows10系统、Laravel6版、Dell G3电脑。

laravel的核心

服务容器,也叫ioC容器,其实包含了依赖注入(DI)和控制反转(IOC)两部分,是laravel的真正核心。其他的各种功能模块比如 Route(路由)、Eloquent ORM数据库 ORM 组件)、Request and Response(请求和响应)等等等等,实际上都是与核心无关的类模块提供的,这些类从注册到实例化,最终被你所使用,其实都是 laravel 的服务容器负责的。服务容器这个概念比较难解释清楚,只能一步步从服务容器的产生历史慢慢解释

该容器提供了整个框架中需要的一系列服务。

IoC 容器诞生的故事——石器时代(原始模式)

我们把一个“超人”作为一个类,

class Superman {}

我们可以想象,一个超人诞生的时候肯定拥有至少一个超能力,这个超能力也可以抽象为一个对象,为这个对象定义一个描述他的类吧。一个超能力肯定有多种属性、(操作)方法,这个尽情的想象,但是目前我们先大致定义一个只有属性的“超能力”,至于能干啥,我们以后再丰富:

class Power {        protected $ability;        protected $range;    public function __construct($ability, $range)    {        $this->ability = $ability;        $this->range = $range;    }}

这时候我们回过头,修改一下之前的“超人”类,让一个“超人”创建的时候被赋予一个超能力:

class Superman{    protected $power;    public function __construct()    {        $this->power = new Power(999, 100);    }}

这样的话,当我们创建一个“超人”实例的时候,同时也创建了一个“超能力”的实例,但是,我们看到了一点,“超人”和“超能力”之间不可避免的产生了一个依赖。

所谓“依赖”,就是“我若依赖你,少了你就没有我”。

在一个贯彻面向对象编程的项目中,这样的依赖随处可见。少量的依赖并不会有太过直观的影响,我们随着这个例子逐渐铺开,让大家慢慢意识到,当依赖达到一个量级时,是怎样一番噩梦般的体验。当然,我也会自然而然的讲述如何解决问题。

之前的例子中,超能力类实例化后是一个具体的超能力,但是我们知道,超人的超能力是多元化的,每种超能力的方法、属性都有不小的差异,没法通过一种类描述完全。我们现在进行修改,我们假设超人可以有以下多种超能力:

飞行,属性有:飞行速度、持续飞行时间

蛮力,属性有:力量值

能量弹,属性有:伤害值、射击距离、同时射击个数

我们创建了如下类:

class Flight{    protected $speed;    protected $holdtime;    public function __construct($speed, $holdtime) {}}class Force{    protected $force;    public function __construct($force) {}}class Shot{    protected $atk;    protected $range;    protected $limit;    public function __construct($atk, $range, $limit) {}}

好了,这下我们的超人有点“忙”了。在超人初始化的时候,我们会根据需要来实例化其拥有的超能力吗,大致如下:

class Superman{    protected $power;    public function __construct()    {        $this->power = new Fight(9, 100);        // $this->power = new Force(45);        // $this->power = new Shot(99, 50, 2);            }}

我们需要自己手动的在构造函数内(或者其他方法里)实例化一系列需要的类,这样并不好。可以想象,假如需求变更(不同的怪物横行地球),需要更多的有针对性的 新的 超能力,或者需要 变更 超能力的方法,我们必须 重新改造 超人。换句话说就是,改变超能力的同时,我还得重新制造个超人。效率太低了!新超人还没创造完成世界早已被毁灭。

这时,灵机一动的人想到:为什么不可以这样呢?超人的能力可以被随时更换,只需要添加或者更新一个芯片或者其他装置啥的(想到钢铁侠没)。这样的话就不要整个重新来过了。

IoC 容器诞生的故事——青铜时代(工厂模式)

我们不应该手动在 “超人” 类中固化了他的 “超能力” 初始化的行为,而转由外部负责,由外部创造超能力模组、装置或者芯片等(我们后面统一称为 “模组”),植入超人体内的某一个接口,这个接口是一个既定的,只要这个 “模组” 满足这个接口的装置都可以被超人所利用,可以提升、增加超人的某一种能力。这种由外部负责其依赖需求的行为,我们可以称其为 “控制反转(IoC)”。

工厂模式,顾名思义,就是一个类所以依赖的外部事物的实例,都可以被一个或多个 “工厂” 创建的这样一种开发模式,就是 “工厂模式”。

我们为了给超人制造超能力模组,我们创建了一个工厂,它可以制造各种各样的模组,且仅需要通过一个方法:

class SuperModuleFactory{    public function makeModule($moduleName, $options)    {        switch ($moduleName) {            case 'Fight':     return new Fight($options[0], $options[1]);            case 'Force':     return new Force($options[0]);            case 'Shot':     return new Shot($options[0], $options[1], $options[2]);        }    }}

这时候,超人 创建之初就可以使用这个工厂!

class Superman{    protected $power;    public function __construct()    {        // 初始化工厂        $factory = new SuperModuleFactory;        // 通过工厂提供的方法制造需要的模块        $this->power = $factory->makeModule('Fight', [9, 100]);        // $this->power = $factory->makeModule('Force', [45]);        // $this->power = $factory->makeModule('Shot', [99, 50, 2]);            }}

可以看得出,我们不再需要在超人初始化之初,去初始化许多第三方类,只需初始化一个工厂类,即可满足需求。但这样似乎和以前区别不大,只是没有那么多 new 关键字。其实我们稍微改造一下这个类,你就明白,工厂类的真正意义和价值了。

class Superman{    protected $power;    public function __construct(array $modules)    {        // 初始化工厂        $factory = new SuperModuleFactory;        // 通过工厂提供的方法制造需要的模块        foreach ($modules as $moduleName => $moduleOptions) {            $this->power[] = $factory->makeModule($moduleName, $moduleOptions);        }    }}// 创建超人$superman = new Superman([    'Fight' => [9, 100],    'Shot' => [99, 50, 2]    ]);

现在修改的结果令人满意。现在,“超人” 的创建不再依赖任何一个 “超能力” 的类,我们如若修改了或者增加了新的超能力,只需要针对修改 SuperModuleFactory 即可。

读到这里,这篇“laravel的核心实例分析”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: laravel的核心实例分析

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

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

猜你喜欢
  • laravel的核心实例分析
    本文小编为大家详细介绍“laravel的核心实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“laravel的核心实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。laravel的核心是服务容器,也就是...
    99+
    2023-06-29
  • css核心语法实例分析
    这篇文章主要介绍了css核心语法实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇css核心语法实例分析文章都会有所收获,下面我们一起来看看吧。   css基本概念  ...
    99+
    2024-04-02
  • CSS的webkit核心浏览器实例分析
    今天小编给大家分享一下CSS的webkit核心浏览器实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2024-04-02
  • vue核心面试题实例代码分析
    这篇文章主要介绍了vue核心面试题实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue核心面试题实例代码分析文章都会有所收获,下面我们一起来看看吧。1-为什么要在列表中绑定key,有什么作用&nbs...
    99+
    2023-07-04
  • Java SpringBoot核心源码的示例分析
    本篇文章给大家分享的是有关Java SpringBoot核心源码的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SpringBoot源码主线分析我们要分析一个...
    99+
    2023-06-22
  • vue组件三大核心的示例分析
    这篇文章主要介绍了vue组件三大核心的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、属性 1.自定义属性propsprop 定义...
    99+
    2024-04-02
  • 关于PHP核心功能的示例分析
    关于PHP核心功能的示例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP是我们一直都很关注的语言之一,随着PHP6的升级,它的功能也越来越强大,我们这里...
    99+
    2023-06-17
  • React 跨端动态化核心技术实例分析
    目录一 前言二 React 技术核心优势分析1 数据驱动模型2 从 JSX 到虚拟 DOM3 独立事件系统三 React 能为跨端动态化做些什么?1 React 语法做 DSL2 保...
    99+
    2024-04-02
  • Laravel开发实例分析
    本篇内容主要讲解“Laravel开发实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel开发实例分析”吧!   准备开发环境   原教程使用...
    99+
    2024-04-02
  • html5中编辑器核心思想的示例分析
    这篇文章给大家分享的是有关html5中编辑器核心思想的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 代码和特性在chrome49下测试有效。...
    99+
    2024-04-02
  • PHP核心特性命名空间的示例分析
    小编给大家分享一下PHP核心特性命名空间的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!提出PHP 在 5.3 后提出了命名空间用来解决组件之间的命名冲突问题,主要参考了文件系统的设计:同一个目录下不允许有相同的文...
    99+
    2023-06-15
  • Druid核心源码分析DruidDataSource
    这篇“Druid核心源码分析DruidDataSource”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Druid核心源码分...
    99+
    2023-07-05
  • Ajax技术组成与核心原理的示例分析
    这篇文章将为大家详细讲解有关Ajax技术组成与核心原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、Ajax特点:局部刷新、提高用户的体验度,数据从服务器商...
    99+
    2024-04-02
  • 如何实现GNU核心实用程序分析
    本篇文章为大家展示了如何实现GNU核心实用程序分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。大多数 Linux 系统管理员需要做的事情都可以在 GNU coreutils 或 util-linu...
    99+
    2023-06-16
  • laravel中软删除的实例分析
    这篇文章主要介绍“laravel中软删除的实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“laravel中软删除的实例分析”文章能帮助大家解决问题。在laravel中,软删除指的是数据表记录并...
    99+
    2023-06-29
  • Laravel的生命周期实例分析
    本篇内容主要讲解“Laravel的生命周期实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Laravel的生命周期实例分析”吧!Laravel的生命周期 A世间万物皆有生命周期,当我们使用...
    99+
    2023-06-30
  • java编程Reference核心原理示例源码分析
    带着问题,看源码针对性会更强一点、印象会更深刻、并且效果也会更好。所以我先卖个关子,提两个问题(没准下次跳槽时就被问到)。 我们可以用ByteBuffer的allocateDirec...
    99+
    2024-04-02
  • SpringIOC与DI核心重点分析
    目录1. Spring 是什么2. IOC 是什么2.1 正向控制2.2 反向控制3. DI 概念说明4. Spring 的工作模式可以理解成一个买卖对象的市场5. 以一个小程序来理...
    99+
    2022-11-13
    Spring IOC与DI Spring DI Spring IOC
  • Java贪心算法实例分析
    这篇“Java贪心算法实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java贪心算法实例分析”文章吧。贪心算法贪心算...
    99+
    2023-06-29
  • Spring AOP核心功能源码分析
    这篇“Spring AOP核心功能源码分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring A...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作