一.php语言特点及发展现状

1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于大型系统。除非有一个强制性的约定,对于静态语言,比如java可以在编译的时候来进行检验,但是解释性的语言则不然。

2.PHP是弱类型语言。对于弱类型有的说是优点有的说是缺点,php中的变量可以不事先说明就可以赋值使用,并且可以动态改变它的类型和值而且在这过程中不会报任何错误。看起来得到了方便,但是也失去了条理性和安全性,在小项目中很灵活很方便,但是在大型项目中得不偿失。

3.面向对象和面向过程共存,一个应用生命周期可以全部用面向过程也可以全部用面向对象去写,这种情况在项目整合过程中会出现无法整合的情况,或者需要巨大的代价甚至重构。

4.代码碎片化,魔术方法调用很多。

laravel是为了提高php大型开发效率而生,同时也提高了应用的健壮性,可维护性。

组件化开发,没必要造轮子,比如laravel里面核心代码也是用到部分symfony的代码。

框架的一些核心也是组件的方式

二.laravel框架介绍

Laravel框架优点:

1.包含更多的功能,比如队列,搜索,数据迁移,定时脚本。

2.通过Composer使用了丰富的第三方包。

3.设计思想先进,引入了门面,依赖注入,Ioc模式,等设计模式,扩展性很强。比如laravel框架中所有使用的服务功能,是由服务提供者存放到IOC容器中,当具体使用哪些服务时候,则直接从容器中获取就行,这样分离了服务提供者和使用者,服务使用者不需要关心服务是谁提供的,这样就实现了解耦,当替换服务等时候就非常方便了。

4.社区活跃。

5.基于Laravel开源项目多。

Laravel技术特性:

Laravel拥有一个非常简单的核心。

项目目录非常简单,如下图

container类是负责组装调度各种组建服务的容器,和web没有什么关系,会将各种功能合理的组装在一起,最终构成了一个大型的功能齐全的web框架。

尽管核心非常简单,但是实现还是比较复杂的,并足以支撑大型的应用。

这些服务最终构成全站的功能。如果需要可以添加自定义服务或者第三方的包并注册进去就可以自动加载。

每个功能可以理解成一个服务service。比如视图渲染,路由请求拦截,权限验证,缓存。对于很多php框架这些功能都是框架核心里提供的功能,固化在框架中,但对于laravel框架它们是独立的模块。通过提供器(provide)来把这些service注册到laravel核心容器(container)中,最终构成一个强大web体系。

三.laravel核心概念

1.服务容器(Container)。

容器的概念就如同其名字一样,容器就是用来盛装东西的,我们可以往容器里存放东西,也可以提取东西,而在Laravel中容器存放的是一个个实例的对象或者服务,Laravel 的核心就是一个 IoC 容器。

为什么要使用容器?

这里要提到控制反转Ioc(Inversion of Control)和DI(依赖注入),这是一种面向对象的设计思想,可以让我们设计出松耦合、更优良的程序。

一个系统在没有引入控制反转的时候,就如上图所示,对象Object A当依赖于对象Object B的时候,就需要去new一下Object B,而当需要Object C的时候又得在代码里去new一下Object C。

中间有个Ioc容器,对象Object B在初始化时候往Ioc容器中注入自己一个实例,当对象Object A需要使用对象Object B提供的相应功能时候,并不需要new一下对象Object B,而是在Ioc容器中之间取出对象Object B的实例。这样就实现了Object A与Object B之间的解耦。

一般控制反转需要结合依赖注入来做,依赖注入是将一个实例变量传入到对象中去,Laravel的依赖注入是利用反射(Reflection)来完成的。

2.服务提供者。

Laravel中的容器有绑定和解析的过程,绑定一般是由服务提供者来实现,一旦一个服务提供者被注册了,那么就可以被提供服务,服务提供者都继承serviceProvider这个类,这个类包含两个方法boot 和 register 方法,在实现自定义服务提供者时大部分都是在处理这两个方法。

我们可以将绑定的过程写在这两个方法里,那么这两个方法有什么区别呢?

register 方法用于执行服务绑定处理。另外在 boot 方法中可以使用所有已绑定的服务。

3.Facades。

4.Contracts(契约)

四.laravel核心功能

1.队列

laravel队列服务为各种后台队列提供了统一的Api,允许延迟比较耗时的任务(例如邮件发送)的执行,从而提高系统响应速度。支持队列失败重启功能。

2.中间件

3.搜索模块

php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性相关推荐

  1. Spring框架(二) 底层架构核心概念解析-四万字你值得一看

    本篇文章将对Spring底层的一些概念做一些简单的分析 , 也是为了方便后续在阅读源码的时候更加的方便 BeanDefintion BeanDefintion是一个接口 , 它表示一个Bean的定义 ...

  2. Sg.js框架核心概念

    Sg.js框架核心概念: 1)所有变量.方法.类对象全部都是从属于$g主树,由$g分支出很多$g.变量名.$g.方法.$g.对象id.$g.类: 2)获取控件内部属性必须使用公开的get方法获取,禁止 ...

  3. 量化回测框架Backtrader【3】-核心概念Lines

    目录 一,什么是Lines 二,Lines的声明 三,Lines的访问 四,Lines的长度 五,Lines和参数的继承机制 题外话 这讲介绍BackTrader的一个贯穿框架始终的核心概念-line ...

  4. 【Python自动化测试15】unittest测试框架的核心概念与作用

    文章目录 一.前言 二.认识单元测试 三.unittest核心概念与操作 3.1.unittest的作用 3.2.测试用例(TestCase) 3.3.运行测试用例 3.4.测试套件.加载器与运行器( ...

  5. 并发框架Disruptor(核心概念 入门 高性能原理-伪共享 CAS 环形数据 生产和消费模式 高级使用 )

    并发框架Disruptor 并发框架Disruptor Disruptor概述 背景 什么是Disruptor 为什么使用Disruptor Disruptor 的核心概念 Ring Buffer S ...

  6. 机器学习核心概念、常用术语整理(建议收藏)

    [转]机器学习核心概念完全解析(建议收藏) 原文链接:https://mp.weixin.qq.com/s/wEpmF1gdvsIimnvXrxKdRw AI干货知识库 刚接触机器学习框架 Tenso ...

  7. Go modules基础精进,六大核心概念全解析(下)

    Go 语言做开发时,路径是如何定义的?Go Mudules又为此带来了哪些改变?本文将会全面介绍Go Modules六大核心概念,包括了设计理念与兼容性原则等,掌握这些技术点对于管理和维护Go 模块有 ...

  8. Maven学习总结(四)——Maven核心概念

    2019独角兽企业重金招聘Python工程师标准>>> Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平 ...

  9. 《Spark大数据分析:核心概念、技术及实践》大数据技术一览

    本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问云栖社区"华章 ...

最新文章

  1. Centos7 安装redis
  2. Linux内核中的进程等待与其实现解析
  3. 【推导】Codeforces Round #364 (Div. 2) D. As Fast As Possible
  4. 2019年上半年总结__下半年计划
  5. CNN for Semantic Segmentation(语义分割,论文,代码,数据集,标注工具,blog)
  6. 【实战 Ids4】║ 在Swagger中调试认证授权中心
  7. .NET Core 1.0发布:微软开源跨平台大布局序幕
  8. 【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)
  9. 即将全部下架!支付宝等平台不许再卖互联网存款产品
  10. ACM做题过程中的一些小技巧
  11. python爬虫什么意思-python爬虫什么意思
  12. IOS开发学习笔记007-数据结构
  13. 2017.5.26暴力赛解题报告
  14. POJ 3641 Pseudoprime numbers (miller-rabin 素数判定)
  15. Android R系统Fingerprint指纹流程归纳
  16. 资源下载https://msdn.itellyou.cn/
  17. cocos creator 游戏源码_Cocos Creator 3D v1.0.2 正式发布,新增小游戏平台支持
  18. 百度地图车辆运动轨迹
  19. Maven配置nexus私服地址
  20. python将图片转换为base64

热门文章

  1. sql server 数据库改名
  2. Python疑难杂症:SyntaxError: Non-ASCII character Python中文处理问题
  3. 关于Qt的事件循环以及QEventLoop的简单使用
  4. WindowsAPI-Findwindow函数和FindWindowEx用法
  5. 关于C++中vector和set使用sort方法进行排序
  6. 矩阵键盘程序_独立按键与矩阵按键
  7. mysql 多列合并为一列_多列数据合并一列,还在用数据透视就out了,用=号只要三步完成...
  8. Android允许应用程序使用Http明文网络传输
  9. Android开发之使用Android studio进行两个项目合并的方法
  10. mac地址容量的作用_S6520X+MAC地址容量检查命令