laravel中的Facades和Ioc Container还有ServiceProvider 思路分析?
首先在学习laravel中看container中的container这个类的时候有点懵,这个是一个ioc Container我知道但是 这个laravel中的我不是太能看明白不知道是否能有分析过的人帮忙分析一下能有个清晰的思路 还有就是ServiceProvider这个类 也比较难以理解 好像很多都是围绕这两个类玩的,有时间的 可以一起都帮忙分析下 主要想知道他的运用原理 知其然知其所以然吗! 先行感谢了
已有的资料
PHP程序员如何理解IoC/DI
PHP程序员如何理解依赖注入容器(dependency injection container)
回复内容:
你的迷糊就是被一些文章里大量的术语搞的,所谓ioc 容器的说法我觉得用服务容器的更合适,ioc只是一种思想,实现ioc可以是依赖注入,也可以服务定位器,策略模式,思想和实现之间我觉得不能混为一谈。laravel中的容器是把被依赖的类当作服务,每当需要传入被依赖的类时,比如你想使用缓存类,换句话说你现在依赖一个缓存服务时,由一个叫做容器的类负责具体的实例化,其工作就是解析类,解析出你的缓存服务是memcache还是redis,还是别的什么,然后实例化,注入到你的消费类中,如此就实现了ioc。当然这需要抽象的配合,否则你注入个别的,方法不一样当然无法工作了。容器只是一种管理类的方式。
那么问题来了,容器怎么知道要创建哪个类的实例?也就是类是如何被解析的?这个就可以在service provider里绑定,你把需要用的实现在这里绑定,当容器需要时就知道解析到哪个类了。
那么问题又来了,程序如何知道都有哪些service provider? 这又在config/app里面定义的,专业点说注册服务。
我建议你自己亲自动手创建一个service provider 绑定一个服务,注册,又或者你玩玩别的独立的服务容器,比如pimple,把他用在你自己的项目中,就很好理解了。
至于facade,更好理解,实际是通过容器解析到实际的类,然后通过魔术方法去实际的类上执行方法。我也是醉了。
这也是很多人批评facade的原因,这东西多包装了一层语法糖而已。 Facades 是外观模式,类似代理,在 Laravel 里的作用其实就跟 PHP: class_alias 的作用类似,只是把框架里带命名空间的类变得更好记,比如:App => Illuminate\Support\Facades\App 。 另外一个好处是:Laravel 里的外观是可以很方便的自定义的,直接修改 config/app.php 里的 aliases 部分即可,比如,你觉得系统提供的 Cache 不好用,你想用自己的,直接改成你想要的类名就好了。当然外观还有一些其它的好处,也有它的弊端,比如无法直接访问真正目标对象的类常量。
Ioc Container IOC容器,上面的两篇文章讲其它已经得很清楚了。我用比较通俗的文字来讲一下:这个容器就相当于我们的工具想,我们到哪儿都带着它,用的时候从里面取出想要的工具即可。
那么 ServiceProvider 是什么呢?它就是完成了 “在出门前把工具放到工具箱” 的过程,ServiceProvider 只是把一个东西(通常是实现某个功能的服务,比如缓存,也可以放一些配置进去)在容器里注册,框架运行时会调用每一个 ServiceProvider 的 register 方法完成注册该服务并启动。
然后你就可以在控制器或者其它框架启动后的地方从容器里取出该服务实例来使用。
简单点描述就是这样,不过你可以从源码 framework/Application.php at 5.0 · laravel/framework · GitHub 类开始一点点的看运行流程。
不知道是不是你想要的。 最近看了一阵子larave,感觉:
1、IoC跟Phalcon的DI是一样的,也就是一个对象容器,核心就一个:
<span class="x">protected static $instance;</span>
Service Provider:Laravel 5.1 文档攻略 ——Service Providers
Service Container: http://laravelbase.com/collections/1/47
Facades: http://laravelbase.com/collections/1/49 一切都怪这些该死的名词,大家用的不一样。
说白了服务容器就是接口,然后服务提供者就是提供服务的实现类。
例如接口Storage class ,实现类Ftp class或Local class。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel 9 및 CodeIgniter 4의 최신 버전은 업데이트된 기능과 개선 사항을 제공합니다. Laravel9은 MVC 아키텍처를 채택하여 데이터베이스 마이그레이션, 인증, 템플릿 엔진 등의 기능을 제공합니다. CodeIgniter4는 HMVC 아키텍처를 사용하여 라우팅, ORM 및 캐싱을 제공합니다. 성능면에서는 Laravel9의 서비스 제공자 기반 디자인 패턴과 CodeIgniter4의 경량 프레임워크가 뛰어난 성능을 제공합니다. 실제 애플리케이션에서 Laravel9은 유연성과 강력한 기능이 필요한 복잡한 프로젝트에 적합한 반면, CodeIgniter4는 빠른 개발 및 소규모 애플리케이션에 적합합니다.

Laravel과 CodeIgniter의 데이터 처리 기능을 비교해 보세요. ORM: Laravel은 클래스-객체 관계형 매핑을 제공하는 EloquentORM을 사용하는 반면, CodeIgniter는 데이터베이스 모델을 PHP 클래스의 하위 클래스로 표현하기 위해 ActiveRecord를 사용합니다. 쿼리 빌더: Laravel에는 유연한 체인 쿼리 API가 있는 반면, CodeIgniter의 쿼리 빌더는 더 간단하고 배열 기반입니다. 데이터 검증: Laravel은 사용자 정의 검증 규칙을 지원하는 Validator 클래스를 제공하는 반면, CodeIgniter는 내장된 검증 기능이 적고 사용자 정의 규칙을 수동으로 코딩해야 합니다. 실제 사례: 사용자 등록 예시에서는 Lar를 보여줍니다.

초보자의 경우 CodeIgniter는 학습 곡선이 더 완만하고 기능이 적지만 기본적인 요구 사항을 충족합니다. Laravel은 더 넓은 기능 세트를 제공하지만 학습 곡선이 약간 더 가파릅니다. 성능면에서는 Laravel과 CodeIgniter 모두 좋은 성능을 보입니다. Laravel은 보다 광범위한 문서와 적극적인 커뮤니티 지원을 제공하는 반면 CodeIgniter는 더 간단하고 가벼우며 강력한 보안 기능을 갖추고 있습니다. 블로그 애플리케이션을 구축하는 실제 사례에서 Laravel의 EloquentORM은 데이터 조작을 단순화하는 반면 CodeIgniter는 더 많은 수동 구성이 필요합니다.

Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

대규모 프로젝트를 위한 프레임워크를 선택할 때 Laravel과 CodeIgniter는 각각 고유한 장점을 가지고 있습니다. Laravel은 엔터프라이즈급 애플리케이션을 위해 설계되었으며 모듈식 디자인, 종속성 주입 및 강력한 기능 세트를 제공합니다. CodeIgniter는 속도와 사용 편의성을 강조하여 중소 규모 프로젝트에 더 적합한 경량 프레임워크입니다. 요구 사항이 복잡하고 사용자 수가 많은 대규모 프로젝트의 경우 Laravel의 성능과 확장성이 더 적합합니다. 간단한 프로젝트나 리소스가 제한된 상황에서는 CodeIgniter의 가볍고 빠른 개발 기능이 더 이상적입니다.

소규모 프로젝트의 경우 Laravel은 강력한 기능과 보안이 필요한 대규모 프로젝트에 적합합니다. CodeIgniter는 가볍고 사용하기 쉬운 매우 작은 프로젝트에 적합합니다.

Laravel의 Blade와 CodeIgniter의 Twig 템플릿 엔진을 비교해 보면 프로젝트 요구 사항과 개인 선호도에 따라 선택하십시오. Blade는 MVC 구문을 기반으로 하므로 좋은 코드 구성과 템플릿 상속을 장려합니다. Twig는 유연한 구문, 강력한 필터, 확장된 지원 및 보안 샌드박스를 제공하는 타사 라이브러리입니다.

Laravel - Artisan Console - Laravel 프레임워크는 명령줄을 통한 상호 작용을 위한 세 가지 기본 도구인 Artisan, Ticker 및 REPL을 제공합니다. 이번 장에서는 Artisan에 대해 자세히 설명합니다.
