一.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这个类,这个类包含两个方法bootregister 方法,在实现自定义服务提供者时大部分都是在处理这两个方法。

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

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

  3.Facades。

  4.Contracts(契约)

四.laravel核心功能

  1.队列

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

  2.中间件

     3.搜索模块

【php】PHP现代框架代表-Laravel框架核心技术特性的更多相关文章

  1. 关于laravel框架分页报错的问题

    因为laravel框架有自己的分页封装,所以与其他框架相比laravel框架的分页的实现要方便的多 只要分别在php脚本与视图中使用 $data=DB::table('index_pic')-> ...

  2. 安装laravel框架

    方式一:Windows版本通过composer来下载安装laravel框架 一:laravel是php的一个web框架.laravel框架安装主要依赖composer工具,本经验就介绍一下怎么在win ...

  3. [php]laravel框架容器管理的一些要点

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  4. Laravel 框架 基础(一)

    Laravel 框架 laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持.隐式模型绑定.简化 Eloquent 全局作用域.可选择的认证脚手架.中间件组. ...

  5. laravel框架容器管理

    来自http://www.cnblogs.com/chy1000/p/7072936.html 本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章 ...

  6. laravel框架入门

    本文摘自网络,个人感觉写的很不错,决定收藏一下纯属本人学习之用 本文介绍如何开始使用 Laravel. 读完本文,你将学到: 如何安装 Laravel,新建 Laravel 程序,如何连接数据库: L ...

  7. laravel框架容器管理的一些要点

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  8. laravel框架容器管理的一些要点(转)

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  9. Laravel框架内实现api文档:markdown转为html

    前后端分离的工作模式于今是非常流行了,前后端工作的对接,就离开不了API文档的辅助. 根据自己以往的工作经历,以及了解的一些资讯,API文档的建立,无非以下几种方式: 1. word文档模板 2. 第 ...

随机推荐

  1. winform跳转到bs

    private void button7_Click(object sender, EventArgs e) { System.Diagnostics.Process.Start("http ...

  2. MySQL帮助文档的使用

    帮助文档使用 在 MySQL 使用过程中,可能经常会遇到以下问题: 某个操作语法忘记了,需要快速查找. 当前版本上,某个字段类型我们想快速知道它的取值范围? 当前版本上,都支持哪些函数?希望有例子能快 ...

  3. ADV-299 宰羊 (java,过了30%)

    问题描述 炫炫回了内蒙,肯定要吃羊肉啦,所有他家要宰羊吃. 炫炫家有N只羊,羊圈排成一排,标号1~N.炫炫每天吃掉一只羊(这食量!其实是放生啦),吃掉的羊的邻居会以为它被放生了,然后又会告诉他们的邻居 ...

  4. Python学习第九课——匿名函数

    匿名函数 # 匿名函数 func = lambda x: x + 1 # x表示参数 x+1表示处理逻辑 print(func(10)) # 输出结果为11 # 例:如何将name="han ...

  5. 新闻网大数据实时分析可视化系统项目——14、Spark2.X环境准备、编译部署及运行

    1.Spark概述 Spark 是一个用来实现快速而通用的集群计算的平台. 在速度方面, Spark 扩展了广泛使用的 MapReduce 计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理 ...

  6. LIS问题

    LIS定义LIS(Longest Increasing Subsequence)最长上升子序列 .一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的. ...

  7. 几道经典的SQL笔试题目

      几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人      商品名称     数量 A            甲          2 B            乙        ...

  8. 一 CRM 注册功能实现

    前端:登陆页面按钮跳转到注册页面 dao:  配置连接池 配置session工厂,Hibernate核心配置,映射 配置UserDao,注入session工厂 UserDao:继承HibernateD ...

  9. 吴裕雄--天生自然JAVA面向对象高级编程学习笔记:包装类

    public class WrapperDemo01{ public static void main(String args[]){ int x = 30 ; // 基本数据类型 Integer i ...

  10. linux下mysql允许远程连接

    1. MySql安装教程 https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html 默认情况下mysq的 roo ...