PHP 重装上阵
PHP 不酷了
国内 PHP 社区的现状
• 现状:
• 缺少公认的标准和规范
• 缺乏协作氛围、大家都在自己造轮子
• 所以导致了:
• 发展活力低于其他编程语言
• 开发方式、框架等落后于其他语言
我们该怎么办?
PHP 重装上阵
从这 4 个方面说起

• 代码组织和规划
• 开发
• 调试
• 日志及监控
1. 代码组织和规划
• 代码文件该如何组织?
• 该如何维护第三方依赖包?
2 个标准, 1 个实现
• Namespace
• PSR-0
• Composer
大量著名的第三方软件已经支持 Composer
版本 / 软件包总数

软件包安装总量(每月)
2. 开发框架
开发框架通常会有的问题
• 版本维护不及时
• 第三方插件少
• 社区不活跃
• 文档少
• 性能差
• 能否支持项目的持续发展?
什么是项目的持续发展?
• 项目发展初期
• 迅速搭建产品原型
• 项目发展中期
• 支持产品需求的不断变化
• 项目发展后期
• 方便地进行性能优化
两个比较有特色的功能
Annotation
• 我们写了多少业务逻辑之外的代码?
• Annotation 功能使你专注在你的业务逻辑
上,除此之外的一切都可以用配置的方
式去实现
Service
• 规范化、集中化创建并管理对象的一种
方式
3 个能够加快开发速度的
Bundle
使用 FOSUserBundle 快速搭建你的用户管理系统
使用 NelmioApiDocBundle 快速开发 API 接
口
使用 SonataAdminBundle 自动生成后台管理系
统
3. 调试工具
Ladybug
Ladybug
Symfony Debug Tool
Bar
4. 日志及监控工具
如何更好地写日志 ?
Monolog
• 4 个模块
• Handlers
• Formatters
• Processors
• Utilities
推荐 2 个 Monolog 的功
能
• FingersCrossedHandler
• This provides you with all the information
you need, but only when you need ...
总结

• 代码组织和规划
• 开发
• 调试
• 日志及监控
一些额外的工具
• Vagrant
• Capistrano/Capifony
• Log.io
• React
• Phalcon
• Zephir
Vagrant
Capistrano/Capifony
Log.io
React
Phalcon
Zephir
PHP 重装上阵
Q&A
Php重装上阵
Php重装上阵
Php重装上阵
Php重装上阵
Php重装上阵
Upcoming SlideShare
Loading in …5
×

Php重装上阵

1,546 views

Published on

近几年来国外PHP领域的变革可谓是日新月异,各种工具、框架和标准层出不穷,网站的架构和开发模式都在不断的进行着优化和升级,PHP社区通过努力和协作,正在慢慢夺回被其他语言所夺去的领地,变得酷起来,而你的网站是否还是N年前的那个老样子,是否依然使用着老旧的架构和框架?当你面对需求变化时,是否能够在积极响应需求的同时保持较高的性能?在本次分享中,洪涛将会介绍PHP领域中一些新的能够提高生产力的工具,包括依赖包管理、开发框架、以及部署和监控等等方面,同时洪涛也会介绍一些他在进行项目架构升级时遇到的挑战和经验。通过这些工具和经验,将会使你的PHP项目焕然一新,重装上阵。

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,546
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
21
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide
  • 1.自我介绍
    2.上海唯一的……
    D.先来看一张图
  • 1.非诚勿扰
    d.残酷的现实和问题,那就是
  • 1.近几年各种新潮的技术都来自PHP之外的语言,比如nodejs、ruby和python,而其中ruby是近几年来走的最激进的,我朋友的一个ruby on rails的项目,html都不用直接写了,已经变成了用类似yml的格式文件生成出来的了。
    从整个行业的趋势上来看,虽然大多数网站依然使用着PHP技术,但很多国内大公司的新项目或者是小公司的创业项目,都已经不再把PHP看做唯一的选择。
    d.对于PHP这么一个几乎就是为了web而生的语言来说,这是很遗憾的,也值得我们深思。我总结了导致这个情况的几个原因:
  • 1.举例:我碰见过许多非常优秀的项目,但是他们的代码往往自成一体,很难去做整合,也无法应用到自己的项目中。
    而你是不是也有类似的问题?
    1.人越来越难招 2.产品的可维护性越来越差。3.经常看到别的语言里有各种神奇的东西,但PHP怎么就没有呢?
    D。这些困难其实背后都隐藏着一个更加现实的问题:
  • 如果你带着相同的疑惑和问题来听我的这次分享,恭喜你你赚到了。
    在这次分享中,我会介绍一些强有力的武器,让你的项目重装上阵。
  • 下:从软件开发的4个方面分别介绍一些提高生产力的工具和方法
  • 分别是……
    D.那么我们都知道。在任何项目的一开始,最重要的就是代码的组织和规划,
  • 1.代码的组织和规划并不是一个简单的问题,随着代码量的增加,它直接影响着业务逻辑的清晰程度以及代码的稳定性,糟糕的代码组织和规划甚至会慢慢将项目拖入几乎不可维护的状态。
    例子:我遇到过一个项目…时间很长,接手人很多,网站总是有bug,负责维护的程序员叫苦连天,总是做不久就离职……有一次偶然的机会让我有机会替这个项目把把脉,然后在一次提交记录里发现…action_aboutme_2009_v55_fix.php,我有到一种绝望的感觉。
    所以……组织和规划是很重要的,……
    2.项目一般都会用到一些第三方的软件,比如模板引擎,数据库操作类,session管理等等,这些软件的版本该如何维护?能否自动升级以及解决版本冲突?
    下:那么可能有人要问,这个我也想做啊,但业界有没有规范和标准可以参考呢?
  • namespace 5.3, 表示代码在软件中所处的逻辑位置;PSR-0 文件命名、路径和namespace使用规范制定了标准
    在遵循这两个标准的基础上,任何一个软件的结构都可以做到标准化
    在实现了这个标准化的基础上,项目的代码管理和第三方包管理就可以做到自动化
    而Composer则是在这种自动化的一个具体的软件实现
    Composer 依赖管理和自动载入工具(nodejs npm, ruby bundler, java maven)
    他可以通过维护一个json格式的配置文件来做到第三方依赖包管理的自动化
    D。大量第三方软件已经支持使用Composer进行安装。
  • 国外几乎所有知名的第三方软件都支持用Composer进行安装。
    但国内的鲜有支持Composer的,新浪微博开放平台的SDK……
    D:Composer不是PHP官方出台的标准,但是是目前为止社区最支持,软件包最多的依赖包管理工具,它已经成为了事实上的标准
  • 2011-09到2013-10
    总结:从Composer的迅速发展我们可以预期到PHP语言的软件包管理将会慢慢发展成熟,所有软件都会趋向于遵循同一套 代码组织标准进行开发,软件和软件之间的交互将会变得非常简单。第二个可以预期到的是,每个项目变得只需要关注自己的业务逻辑,而其他的功能可以依赖社区,依赖开源和分享的力量来实现。当然也欢迎有能力的开发者把自己的一些好的代码注册到Composer上,让更多人能够轻松的使用你的代码。
    这样,通过Composer这个平台,大量优秀的软件将会通过协作的方式变得更加优秀,软件开发者也将慢慢从自己开发轮子变为共同开发优秀的软件,而PHP社区的活力将会重新被激发起来。
  • 老生常谈……每个开发人员都有自己的喜好和选择,
    我也经常研究各种开发框架,以前甚至也自己写过框架。
    不知道大家对于开发框架的选择上有什么心得,但对于我来说,经常会遇到这几个问题
  • 1.比如.....
    2.前阵子就爆出过一个新闻,CI(CodeIgniter)框架的母公司EllisLab不再维护CI了,这个让大量使用CI的团队一下子没了方向。
    D。但是对于我来说……
  • 1.初期最重要的就是验证产品的可行性,我们需要最快速的把产品原型搭建起来,从而去验证这个产品的定位并且进行初步的用户积累,当然土豪公司除外,毕竟第一个版本上线就是完美的不需要调整的,这种情况发生的可能性并不大,而一上线就准备几百台服务器,能导入几百万用户的项目也更加是屈指可数。
    2.一般产品的方向已经定了下来,接下来就需要不断地改进:增加各种新功能、优化各种操作的步骤、提高用户体验等等。这时候……,我们不能说……
    3.产品的方向和业务逻辑已经基本定型,我们需要持续对项目进行优化和调整以提高系统的性能:比如异步化拆分业务逻辑,缩短响应时间,增加能够承受的最大用户的数量等等
    下:我基于这几个需要考量的地方,发现现在很多框架其实是没有办法同时做到这三点的,有的…(cms)………对于这个问题我也思考了很久,选择了很久,市面上大量的框架我都深入研究过,但都发现有各种各样的缺陷。而Symfony是我认为唯一能够同时做到这三点的一个开发框架,从09年开始我主导的项目也全部使用Symfony进行开发。
    那么Symfony这种框架到底如何做到这三点呢?我接下来会通过几个Symfony的功能以及Symfony的一些第三方的Bundle来向大家展示一下用Symfony去开发项目大概会是什么样子的。
  • Annotation其实是注释的意思,它在这里代表着软件开发中的一种方式,也就是使用注释去定义程序运行的逻辑。
    1.大家思考一下,在实现一个需求的时候,我们写了……,我们花了多少时间去设置路由,编写接口文档,设置页面缓存……而这些代码是否真的有必要和业务逻辑混合在一起?我想答案肯定是否定的。
    2.而具体该怎么做呢?Annotation就是实现这种分离的强有力的工具,Annotation使你……
    D。我们看一个具体的例子。
  • Annotation使你通过注释的方式去对程序运行的逻辑进行配置,你甚至可以编写自己的Annotation来实现自己的服务。
    我们完全可以把一个Annotation功能和一些业务逻辑分别交给两个不同的工程师或者是团队,Annotation团队可以专心地开发他们的服务,不用担心具体的业务逻辑是怎样的,而业务逻辑开发团队则可以只关注自己的逻辑,而不用担心服务的细节到底是怎么样的。
    结论:使用Annotation可以使你的项目高度抽象化,使你项目中的每一个业务逻辑之外的服务都变成独立的,可配置的,而最妙的就是:它们在代码层没有产生重叠和交互,但所有的服务又能够和业务逻辑很好地结合在一起运行。这样可以在保持较快的开发速度的同时保证代码的稳定性。
    D。接下来我会介绍Service这个功能
  • 1.service其实就是一个软件系统中的服务的意思,类似数据库操作、发送email、用户session管理、连接redis等等……
    Service并没有什么稀奇的,但完整实现依赖注入的Service系统屈指可数,什么是依赖注入我在这里并不多讲,我举个真实的例子:
    API接口开发。
    在一般的项目中,实现这个需求一定不是非常容易的,因为这个需求贯穿了架构层和业务逻辑层,
    a.它既不是一个用户数据,也不完全是一个系统数据,你的框架是否有足够的弹性去容纳这么一个计数器的存在?
    b.怎么样在尽量少改变代码的基础上去做这个事情?
    如果用service的话:我们可以新增一个计数器service用来保存查询的次数,然后在数据库操作service里注册一个新的呼叫方法,让它每次有查询的时候都呼叫一下计数器service。。。。。然后在ResponseListener里判断:如果是json包则调用重构返回包的方法:从计数器service里获取到这个数字再重新打包进返回的json字符串即可。通过这种方式进行实现的话,对完全不侵入原有系统的。
    D。不知道大家是不是觉得很有意思,这些其实只是Symfony2自带的许多很有意思的功能的一小部分而已,而我接下来会介绍一些Symfony2的Bundle,这些Bundle可以理解为基于Symfony2的第三方软件,通过使用他们可以帮助我们实现很多重要的功能,也可以加快开发速度
  • 介绍bundle
    下:那么要开发一个网站,必须要准备的功能之一就是用户管理系统,允许用户注册登录退出等等,不知道大家有没有发现,其实大部分网站的用户管理系统都是类似的,但很多项目都在重复开发用户系统,或者是被迫用一些不成熟的第三方软件去实现,比如以前很火的ucenter。
    那么我在这里向大家介绍一个基于Symfony2的用户管理Bundle:FOSUserBundle
  • FOSUserBundle完整实现了注册、邀请注册、登录、退出、个人信息管理、查找密码、用户分组、权限管理等等功能,而且能够很好的支持自定义流程,从样式到注册步骤再到表结构以及储存密码加密的方式,全部都是由service进行维护的,所以如果你有自己的需求,对它进行客制化是非常方便的。
    结论:使用FOSUserBundle可以使你通过简单的配置就实现一个网站完整的用户管理功能。
    下:大家都知道近几年来移动开发很火
  • 1.碰到的问题就是如何调试和模拟。因为……接口在开发时……app的相应功能往往还没有被开发出来。这时候无论是后端程序员还是APP程序员都需要一个临时的工具能够对API进行调试和模拟。
    而NelmioApiDocBundle就是这样一个工具,它可以使用Symfony的Annotation功能去定义一个接口的具体参数,然后通过定义生成一份API接口说明文档以及一个用于调试和模拟的网页。
    结论:所以……在接口的开发过程中,我们就可以同步完成文档以及调试工具。这能够极大地加快接口的开发和调试速度
    D。大多数网站除了展现给用户的部分之外,还有一个用于维护数据的后台,网站开发中也总是少不了后台功能的开发。后台虽然用的人不多,但代码量却一点也不少。后台操作中,大量操作都是基于数据表的CRUD操作,有没有工具能够使我们很方便的进行后台开发呢?
  • 介绍:使用SonataAdminBundle就可以使你通过简单的配置来生成后台管理页面。
    生成出来的管后台理页面不但可以对表里的数据进行CRUD操作,也可以排序,搜索,甚至可以对数据之间的关系进行维护,比如说1:N。
    大家猜猜实现这个页面用了多少代码?不到20行。所以可见SonataAdminBundle的功能之强大。
    总结:这些是Symfony生态圈的一部分,还有大量……提高开发效率,而这种集思广益,共同协作的开发方式也是我选择Symfony作为开发框架的主要原因。
    InfoQ……私下交流……如果有机会……
  • 调试工具大家都不陌生,从断点调试到各种内核分析工具,PHP的调试工具因有尽有,但我今天不会去讲这些,我今天要讲的是大家最常使用的PHP内置调试函数var_dump,准确的说我是要介绍一个更加好的var_dump;
    下:var_dump,一个更好的var_dump
  • 1.这是我在真实工作中常常遇到的情况,为了调试所以用var_dump函数打印了一个对象,没想到这对象内部简直包含五湖四海,打印出来的文本足足有几兆,根本不具备实用性,寻找特定的属性也非常痛苦。
    d。直到有一天我发现了一个var_dump的升级版:调试信息打印工具-ladybug
  • 1.ladybug可以根据不同的环境,例如是网页还是命令行,用最合适的格式将信息显示出来。除此之外,如果打印的对象是一个类,它也可以将类的所有信息,包括方法,属性,属性的值,在哪个文件被定义的,等等信息,通过很易读的方式展示出来。
    2.介绍:比如图中……
  • 总结:通过使用ladybug,可以加快我们的开发速度,减少在调试过程中耗去的不必要的时间,从而使我们的开发更有效率。
    D:很多人都说,如果把修复BUG的时机从上线后发现BUG再进行修复提前到在开发的过程中就进行修复,那我们修复BUG的成本将会变得非常低,但问题是……,因为……,靠变量打印,断点调试甚至其他调试工具都无法很好的做到这一点了。而为了解决这个问题,一个开发时的调试工具是必不可少的,这个工具需要主动告诉我们我们程序执行过程中的每一个细节,而不是让我们在程序出现问题后去被动的进行调试,那么一旦在开发时就掌握这些信息的话……尽早……有没有这样的工具存在呢
  • 1.这个工具条会出现在每一个页面的下方,它详细记录了包括程序运行的环境,数据库查询次数以及耗时,当前用户session信息,模块名称,模板名称,生成页面总的占用时间,内存占用等等。
    D。如果你觉得它只有这些信息那就错了,每一个图标点进去之后都会显示更加详细的信息,比如我们通过点击时间信息就可以进入一个程序执行的详情页。。。
  • 1.在这个页面中,我们可以看到每一个单独的模块所占用的时间以及消耗的内存。
    2.而在这个图中,色块的长短直接代表着模块执行所占用的时间,我们在这个图中就可以看到一共有4个模块的执行时间上相对比较长,那么我们通过对这些模块进行针对性地优化就可以提高整个页面的响应速度。
    D。而除此之外,正如我之前所说的,Symfony2 Debug Tool Bar也可以系统配置信息、请求参数、处罚事件、数据库查询等等多个维度提供全方面的信息查询,例如这个页面……
  • 1.我们通过这个页面,就可以看到某此请求中所包含的所有SQL语句以及相对应的执行时间,甚至可以在这个界面中对语句进行explain操作,直接找出查询慢的原因。
    就不一一展示了……
    下:那么通过对以上工具的结合使用,就可以很方便地解决调试过程中遇到的种种问题,进而提高我们的开发效率和代码质量
  • 1.日志是任何一个web应用必不可少的东西,不管是在开发环境还是生产环境,我们都需要详细的日志作为调试和监控的工具,而有些项目中也在使用日志系统进行运营数据的统计,可见日志的重要性。
    D。虽然日志很重要,市面上日志管理和查看工具也不少,但我也发现一个问题,那就是很多项目都不会写日志,或者说不会优雅的去处理日志。那么下面我就来具体谈一下这个问题。
  • 1.日志绝对不是把所有信息都写到一个文件里那么简单。
    2.日志有几个基本概念:日志等级,发送目标,处理过程。
    等级:RFC5424:Debug100 Info200 Notice250 Warning300 Error400 Critical500 Alert550 Emergency600
    3.各种日志产生后,处理日志的方法也不同。
    D。业界有许多日志管理工具的实现,最出名的应该就是java的log4j了。而PHP语言里比较新颖而且实现的比较好的就是Monolog
  • monolog是一个日志管理系统,
    前三个分别代表了日志的搜集,格式化,处理阶段。
    通过对这些模块的自由组合以及配置,就可以实现很多特定的功能。
  • 1.解释……程序日志不是太多就是太少,而我们真正需要的是在程序出现错误的时候,尽可能打印和记录最详细的日志,以便我们查找原因。而FingersCrossedHandler就是这么一个工具,在……在……。所以这个功能不论是开发环境还是线上环境,都是非常适用的。
    2.
    D。而Monolog有趣又实用的功能远远不止这些,Monolog几乎可以满足你与日志相关的所有需求。再也不用担心程序出错找不到原因啦。
  • 1.使用Composer进行第三方依赖包的管理以及代码的自动载入。
    2.使用强有力的开发工具例如Symfony可以使你快速搭建产品原型、快速响应需求变化,并且很方便地进行性能优化
    3.我介绍了一个变量调试工具-Ladybug,它是var_dump的良好替代品,它可以用很美观的方式格式化输出变量的具体内容。我还介绍了一个开发时的调试工具-Symfony Debug Tool Bar,它可以在不侵入代码的情况下记录并显示程序背后运行的每一个细节。`
    4.我介绍了一个PHP的日志管理工具,我介绍了它最有特色的功能就是只在你需要调试信息的时候才输出调试信息。
  • 1.vagrant,虚拟机管理工具
    2.Capistrano,代码部署及服务器管理工具
    3.Log.io,日志监控工具
    4.React,事件驱动、无阻塞的PHP
    5.Phalcon,
    6.Zephir(Zend Engine Php Intermediate),让你用近乎类似PHP的语法去写一个PHP的extension
  • 1.vagrant,虚拟机管理工具
  • 2.Capistrano,代码部署及服务器管理工具
  • 3.Log.io,日志监控工具
  • 4.React,事件驱动、无阻塞的PHP
  • 5.Phalcon,用C实现的PHP框架,相比Yaf有着更多的功能和支持,例如ORM和模板引擎等
    最关键的是:社区活跃度非常高œ
  • 希望这些工具能够帮助大家解决工作中遇到的一些实际的问题。
    PHP的世界本来就很精彩,通过Composer这样的依赖包管理工具,每个项目将不再只是一座又一座的孤岛而是变得互相之间有了联系,而随着github这样的平台的诞生,大量优秀的PHP软件正在通过开源和协作的方式变得越来越好,PHP又重新站在了战场上,这一切也让我坚定的相信:PHP的未来将会变得更加精彩。
    PHP是最好的web编程语言,谢谢大家。
  • Php重装上阵

    1. 1. PHP 重装上阵
    2. 2. PHP 不酷了
    3. 3. 国内 PHP 社区的现状 • 现状: • 缺少公认的标准和规范 • 缺乏协作氛围、大家都在自己造轮子 • 所以导致了: • 发展活力低于其他编程语言 • 开发方式、框架等落后于其他语言
    4. 4. 我们该怎么办?
    5. 5. PHP 重装上阵
    6. 6. 从这 4 个方面说起 • 代码组织和规划 • 开发 • 调试 • 日志及监控
    7. 7. 1. 代码组织和规划 • 代码文件该如何组织? • 该如何维护第三方依赖包?
    8. 8. 2 个标准, 1 个实现 • Namespace • PSR-0 • Composer
    9. 9. 大量著名的第三方软件已经支持 Composer
    10. 10. 版本 / 软件包总数 软件包安装总量(每月)
    11. 11. 2. 开发框架
    12. 12. 开发框架通常会有的问题 • 版本维护不及时 • 第三方插件少 • 社区不活跃 • 文档少 • 性能差 • 能否支持项目的持续发展?
    13. 13. 什么是项目的持续发展? • 项目发展初期 • 迅速搭建产品原型 • 项目发展中期 • 支持产品需求的不断变化 • 项目发展后期 • 方便地进行性能优化
    14. 14. 两个比较有特色的功能
    15. 15. Annotation • 我们写了多少业务逻辑之外的代码? • Annotation 功能使你专注在你的业务逻辑 上,除此之外的一切都可以用配置的方 式去实现
    16. 16. Service • 规范化、集中化创建并管理对象的一种 方式
    17. 17. 3 个能够加快开发速度的 Bundle
    18. 18. 使用 FOSUserBundle 快速搭建你的用户管理系统
    19. 19. 使用 NelmioApiDocBundle 快速开发 API 接 口
    20. 20. 使用 SonataAdminBundle 自动生成后台管理系 统
    21. 21. 3. 调试工具
    22. 22. Ladybug
    23. 23. Ladybug
    24. 24. Symfony Debug Tool Bar
    25. 25. 4. 日志及监控工具
    26. 26. 如何更好地写日志 ?
    27. 27. Monolog • 4 个模块 • Handlers • Formatters • Processors • Utilities
    28. 28. 推荐 2 个 Monolog 的功 能 • FingersCrossedHandler • This provides you with all the information you need, but only when you need it. • ChromePHPFormatter • 在 Chrome 的 Console 里输出日志
    29. 29. 总结 • 代码组织和规划 • 开发 • 调试 • 日志及监控
    30. 30. 一些额外的工具 • Vagrant • Capistrano/Capifony • Log.io • React • Phalcon • Zephir
    31. 31. Vagrant
    32. 32. Capistrano/Capifony
    33. 33. Log.io
    34. 34. React
    35. 35. Phalcon
    36. 36. Zephir
    37. 37. PHP 重装上阵
    38. 38. Q&A

    ×