大家下午好,非常高兴跟大家在这边交流关于ThinkPHP一个技术剖析或者一个介绍。首先在 介绍之前我想跟大家说一下这次主题,我们这次主要是关于PHP特性介绍,这次大会议题是关于一些高性能,负载方面,我主要是把相关的包括一些简单高效特性 给大家做一个简单展示,有时候可以介绍一下公司最新平台是一个应用平台。 大家知道 PHP经历了五年积累,先回顾一下PHP发展历程。从06年开始我们发布了PHP第一颁布,是指ThinkPHP,从1月15日发布第一个版本以后,官方 持续发布最新版本,在大会开会前不久,11年5月1日发布了2.1正式版本。框架技术日新月异今天,已经不是什么重大的事情,但是我们仍然非常期待我们加 来一个版本包括我们以后功能改进,在12年的1月15日我们打算举办ThinkPHP6周年嘉年华是非常值得期待,抱着我们开发者心态举办一次更加适合我 们的盛会,ThinkPHP从06年发展至今经历了5年多,不断完善重构,我们在尽我们自己所能,对每一个方法,代码做尽可能优化,导致ThinkPHP 依然在今天被广大用户使用原因之一,因为它简单,高效。 其实五年来ThinkPHP不 仅仅做一个框架一个更新,发布,我认为也是在这种编程思想传播,我们理念是大道至简,开发由我,在我们公司这个原则被广泛应用在公司各个部门,包括设计部 门,研发部门,以及行政部门是我们一个大概一个开发理念。ThinkPHP从简介程度,从50K框架,发展到现在核心700多K,拥有一个简介架构体系, 包括代码实现都是非常简介。 第二我们拥有一个丰富开发文档,以及很好一个用户群体,第 三本身简介用户体现,用户非常简单,拥有很容易上手难得,第四点我们极力跟广大开发者推荐我们所谓开发体验,我认为给开发者最好开发体验就是说我只需要编 写最少代码可以完成相同的功能,这是我们所说大到至简最终根源,目的是让所有开发者做到快速开发这是我们宗旨,我们已经做到架构,安全,规范,大家开发过 程中把更多思想应用逻辑,UI,包括用户体验,帮助大家在开发过程中做更多,更好的工作。本身文档特色也是ThinkPHP一直以来所坚持一个传统特色, 从最近2.1版本开始我们本身已经超过300页开发手册,这个手册把ThinkPHP开发所有知识点,涵盖跟总结,但是仍然无法描述ThinkPHP博大 内涵,我们在基础之上做了一个常见问题跟开发技巧手册,包括超过30个学习用力,15个应用事例,2.1发布过一个视频教程是以后会陆陆续续完善一个视频 方面的教程。 ThinkPHP从06年发展至今因为简介,高效特色不断吸引新的开发用 户加入我们,这是一个从06年开始官方网站一个统计数据,从开始到今年5月份这是一个我们用户群的一个增长数字,虽然说这个数字相对很多产品来说,不算什 么,但是我觉得是用户对我们认可,我们因为这个而需要跟用户不但反馈改进,这是我们以后持续发展的动力。 5 年来ThinkPHP广泛应用咨询,门户,SNS,电商,游戏在内各个领域,也有很多基于ThinkPHP产品诞生,包括开源,商业化产品,我们本身 ThinkPHP用户群包括产品体系在谷歌上已经可以搜到很多项目。下面我们讲一下让ThinkPHP保持简单高效十大特性,第一是高效简单一个导入机 制。可能这个文档有点旧了,第一是我们内置了一个impart方法,我觉得我们先从这个导入方法说起,它简单易用原则从根本导入方法可以导入出来,有很多 JAVA影子,可能用过JAVA的人会非常熟悉import方法,还有支持冲突监测,支持win下的大小写严格检测,2.0开始我们参加了一个别名导入支 持,内部调用了一个require_cache方法,下面是import方法基本方法,第一是别名导入,第二是基类库中的DB类,导入项目类库中的DB 类,让导入工作变得更加简单。 第二我想说关于ThinkPHP编译机制,本身编译机制 让整个框架运行更加高效简单,作用是为了减少内存加载和IO开销,我可以把整个核心类表文件第一次运行整个合并,去除一些注视空白,编译成一个核心缓存文 件,两个本身是一个核心编译缓存,和项目编译缓存合并,固化程序运行时动态定义的常量,去除编译阶段才需要加载的方法和文件。达到真正为项目量身定植框 架,以前一个框架不能满足百分之百开发需要。 ThinkPHP编译机制使得我们开发过程中为我们自己项目需要量身定植一个更加适合自己的项目的框架,除了这个之外部署阶段我们还可以开启一个allinone模式,把核心编译缓存和项目编译缓存合并,这个就是不断完善本身的需求。 第 三点是类库自动加载机制,我们知道如果在很多开发过程中还是需要导入类库做出一些代码冗余,我们提倡让类库自动加载,有两种自动加载的机制,第一种是根据 魔术方法自动导入一些类库,有一些开发者有自己自动加载机制,我们可以配制第二种方式,这样不会产生冲突,这个是自动加载机制一个特色。再 ThinkPHP内部机制有一个加载优先级的概念,首先是别名优先。如果没有监到别名按照下面监测模型,当前项目模型和模型是自动加载不需要导入。 第 三种是自动收缩路径,这个本身有点类似于内置一个导入路径。因为我们这种方式可以让整个IO加载尽量介绍,编译文件合并,尽可能减少IO加载。之前我想补 充一下就是我们ThinkPHPUR模式,第一步是用户通过访问一个URL地址,首先用户体验,这一块是做得比较到位,除了在常规模式以外,还补充了一些 模式,可以通过定义出一个很优美,美观一个URL地址,便于我们用户体验做一些体验工作。我们可以把用户体验做到最好的极致。 下 面是一个ThinkPHP配制方式,长期以来很多开发者会对ThinkPHP一些规则会说ThinkPHP打破了很多常规一些开发规则,我认为所有规则改 变是为了简化开发,ThinkPHP创造了一种新规则,类似配制方式是属于编程界特例,是大写字符大头单字母方法,说到ThinkPHP配制方式主要是一 个惯例忠于配制原则,不需要在项目里面定义太多配制可以正常运作一些基本功能。本身ThinkPHP配制模式是有一个分析配制模式是以往很多框架不具备, 本身我们从按照优先加载生效级别首先惯例配制,项目配制,调试配制,分组配制,模块,操作配制,操作配制是最高级别配制,在程序里面实时通过C方法调整参 数,本身ThinkPHP配制方式也很简单,这个是所有开发ThinkPHP都会懂配制方式,效率也是最高,C方法本身是一个双关方法,只有一个参数是获 取当前配制,如果C方有两个参数是在设置一个动态当前更改配制值,C方法从这个方法来说,可以看到ThinkPHP把整个方法发挥到极致,一个简单方法可 以做成很多功能,C方法包含四种功能,第三种是批量配制,是属于C方法第三个功能,C方法还有第四功能删除配制。 说 到ORM实现很多框架会提到,我想侧重讲一下ThinkPHPORM体现特色,基本上CURD不用多说,一般框架都具备,我想说一个ThinkPHP连贯 操作方法,从1.0版本开始逐步支持,2.0全面支持,抛弃我们以往带参数操作方法,首先很灵活比较易懂,比如说User,排序,要查数据,最后可以把数 据查出来,很多传统方法要记住参数顺序,连贯操作可以随意调整顺序,我们可以对调是不影响整个操作的。 下 面是关于AR模式支持,首先实例话一个用户对象,是一个比较简单一个AR模式支持,这个在ThinkPHP里面可以结合连贯操作方法,可以做得更加优雅。 第六关于ThinkPHP查询操作,很多开发过程中用得更多是查询操作,完成你的ThinkPHP操作,查询方便性提升对用户体验是有很多提升,我们一直 完善本身查询语言,可以做到包括基本,区间,符合,组合查询,定位查询,统计,动态查询,我们可以支持原生查询,在查询范畴里面ThinkPHP可以做得 更加到位。 在查询方式我们可以支持支付串和数组方式,可以做一些字段监测和安全机制更加加强,ThinkPHP自动验证和自动完成机制可以使得开发者写比较少代码可以做到数据安全,监测,包括数据安全写入,是自动验证和自动完成机制。 下 面是本身ThinkPHP数据引擎,ThinkPHP内制一个数据库抽样层可以支持mysql等数据库,可以支持pdo方式连接,整个项目移植的时候,需 要跨数据库做整个平台移植非常有帮助,做到整个平台统一化不需要考虑地层代码工作,甚至我们重新把2.0做到动态切换到不同的数据库,很多企业级开发里面 有这样的需求,我需要在不同数据库之间访问调取接口,可以动态下切换到不同的数据库,可以实时返回目前数据库,包括分布式数据库,读写分离,不需要写额外 代码工作可以支持分布式数据库以及读写分离的工作。 本身我们也内置了一些SQL日至记 录,可以通过SQL信息查询慢查询工作,可以把整个程序优化更加到位一点。地六是高效的模板引擎,ThinkPHP一直以来在模板引擎投入很大经历做,开 发过程中很多项目里面保险很多工作会放在XML里面调整,客户需求经常变化,导致我们这个层面变动非常大,高效模板引擎尽量让工作做得更加简化一点,使我 们调整不需要改太多东西,我们ThinkPHP从早期沿袭一套模板机制,官方推出一些包括smarty等第三方引擎,右边是模板引擎基本用法。其实我们也 提所有框架不可能满足百分之百项目需求,但是ThinkPHP一直在这块做努力,尝试让我们开发工作可以满足你不同的应用需求,从我们刚才提到一些这些模 式扩展以外,还有很多扩展类型,包括类库,模块,操作模型等,本身涵盖方方面面,可以在不同程度做一些扩展需求,因此来说虽然我们ThinkPHP本身内 制框架类库不是特别丰富,可以通过扩展机制,第三方导入机制让整个类库变得更加饱满起来,官方是专注于框架本身,在类库远远没有一些很多强大团队来得更加 优秀,我们一直做自己更加专注的事情。 这个是刚才说过,整个文档体系的,因为我们从 1.0开始有一个非常详细的文档,这个文档特色我们从一直保留至今,我觉得再好程序一个没有文档支持是没有价值的,但是确实再好文档不能帮助你解决所有问 题,作为一个开源框架来说需要更多开发者富有一种探索或者是一些共性精神,这样才能帮助整个开源社区做得更好,包括学习事例,文档有很多人员提供很多经 验,希望把文档工作做得更好,把整个开发体验做得更好。 下面简单说一下 topthink平台是基于ThinkPHP架构体系,我们不断做一些项目过程中,发现ThinkPHP本身是一个框架,我们必须从框架到应用做出一个跨 越,这个平台就是为这个东西应运而生,提供了一些CMS,CRM,B2CSNS,基于框架体系,框架跨到应用平台部分,本身是一个开发平台不是一个产品的 东西我们称之为用户应用解决方案提供平台,主要特性是基于ThinkPHP重新重构应用平台,是针对大应用和门户特别设计,内制一些后台标准管理全县体 系,提出一种文档模型概念,可以在后台动态做一些建模工作,这是我们说文档模型架构设计,配合这个模型有一个应用标签库,可以减少在我们整个后台包括前台 一个开发工作,只要是平台一个主要用处之一,更加丰富一个标签库功能,最后可以支持很多细节功能,比如说包括多应用,子域名多域名部署,这个平台本身目前 不断做一些完善推广,还没有一个成熟发布,但是已经有一些典型应用包括我们以前做过腾讯家居等,刚刚上线帮购平台是美特斯邦威上线平台这是比较典型项目, 包括很多一些在建应用,这个是我们今天要讲的主要内容谢谢大家。 |