V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
tanteng
V2EX  ›  PHP

《性感的 PHP——现代化 PHP 开发》PPT 分享

  •  1
     
  •   tanteng · Sep 25, 2016 · 6412 views
    This topic created in 3502 days ago, the information mentioned may be changed or developed.

    (原文链接: https://www.tanteng.me/page/mordern-php

    说好的把这次技术分享的 PPT 发出来的,一直没时间弄,现在整理了一下,并导出了一份 PDF 版的 PPT ,给大家参考。( PS :本次技术分享仅仅是介绍一些关于现代化 PHP 开发的技术,并不是讲某个方面的高深技术和经验,即便如此,针对目前的 PHP 现状,很多项目,公司和开发者,还在使用过时的 PHP 技术,这个分享还是有价值的)。

    本次技术分享主要讲了一些现代化 PHP 开发的技术, PPT 重点介绍了命名空间,闭包,匿名函数, Traits 这些新特性,以及介绍了 Composer 依赖包管理器和 PSR 规范。

    主要内容

    PHP 正在重生。作为一门专注 WEB 开发的语言,它不断吸取其他语言的优点,如命名空间,闭包,性状,操作码缓存等特性, PSR 规范和 Composer 包管理以及 PHP 7 的性能提升, PHP 正在变成一门现代化的语言,让我们一起聊聊 PHP 有哪些新的变化!

    • 命名空间
    • PSR 规范
    • 闭包和匿名函数
    • Trait
    • Composer 包管理器
    • 语法新特性
    • PHP 7 性能
    • Laravel 框架介绍

    全面的 PHP 技术堆栈图

    我们先来回顾一下 WEB 开发所用到的技术和工具,这里的 PHP 可以替换为 Python , Java ,.NET 等其他语言,因为 PHP 只是一门语言,而 WEB 开发的本质是一样的。我们的重点是掌握 PHP 本身,和它密切相关的如 MySQL , Nginx/Apache , Linux ,前端方面至少熟悉 jQuery, css 等,但是当项目规模越来越大,并发量越来越高,我们就要用到 Redis , Memcache 等缓存技术,总之,我们要学的东西越来越多,才能满足高性能的 WEB 开发。这里只是列举了比较常用的技术和工具,欢迎大家进行补充。

    PHP 技术堆栈图

    命名空间

    PHP 一个重要的改变,就是引入了命名空间。命名空间是使 PHP 成为一门现代语言的重要特性,它不仅解决了第三方扩展包的类命名冲突的问题,还提供了良好的代码组织的方式,并且通过它进行自动加载。

    如 PHP 手册里所描述,命名空间好比操作系统中的目录,两个同名的文件可以共存在不同的目录下。同理两个同名的 PHP 类可以在不同的 PHP 命名空间下共存,就这么简单。

    因此把你的代码放在你的命名空间下就非常重要,避免其他开发者担心与第三方类库冲突。

    PSR 规范

    PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。

    PHP FIG , FIG 是 Framework Interoperability Group (框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于 Laravel, Joomla, Drupal, Composer, Phalcon, Slim, Symfony, Zend Framework 等),虽然不是「官方」组织,但也代表了大部分的 PHP 社区。

    项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的困扰。 自动加载规范非常重要, PHP 组件都遵循自动加载规范,才能通过 Composer 进行管理。

    Composer 包管理器

    Node.js 有 npm , Python 有 pip ,现在 PHP 有了 Composer , Composer 是 PHP 的一个包( PHP 组件)管理器,这些组件遵循 PSR 规范,因此可以快速应用到你的项目中,而且可以开源共同维护。

    Composer 包管理器

    PHP 组件具备以下特点

    • 作用单一:专注于解决一个问题,而且使用简单的接口封装功能
    • 小型:小巧玲珑,只包含解决某个问题所需的最少代码
    • 合作: PHP 组件之间可以良好合作,组合在一起实现大型项目
    • 测试良好:本身提供测试,而且有充足的测试覆盖度
    • 文档完善:应该提供完善的文档,能让开发者轻易安装、理解和使用

    PHP 新语法

    PHP 5.6 —— PHP 7 提供了很多新的语法和特性,如闭包和匿名函数, Traits ,运算符简写方式,数组简写方式,类型约束等等。

    学习现代化 PHP 开发的最好方式

    学习现代化 PHP 开发的最好方式是学习现代化的开发框架,如 Laravel ,这些新的 PHP 概念和语法,以及 Composer ,都在框架中广泛使用,并且还可以学习到很多有关设计模式的知识。

    PPT 下载地址

    点此打开 PDF 版 PPT

    Supplement 1  ·  Sep 25, 2016
    43 replies    2016-10-03 22:30:24 +08:00
    tanteng
        1
    tanteng  
    OP
       Sep 25, 2016
    大家对现代化的 PHP 开发有什么看法,可以讨论
    bdbai
        2
    bdbai  
       Sep 25, 2016 via Android
    为什么 PHP 非要扯上前端呢。
    tanteng
        3
    tanteng  
    OP
       Sep 25, 2016
    @bdbai 这里只是带过一下, PHP 只是 WEB 语言之一, WEB 开发包括前端后端很多方面,也是回顾一下 WEB 开发所涉及的一些技术。
    cha1
        4
    cha1  
       Sep 25, 2016   ❤️ 1
    tanteng
        5
    tanteng  
    OP
       Sep 25, 2016
    @zqhong 谢谢指正!已更新!
    cha1
        6
    cha1  
       Sep 25, 2016   ❤️ 1
    PHP 语法新特性这里:
    > $a = $_GET['a'] ?? $_GET[‘ a ’]:1;

    似乎没这种用法?我猜您说的是这个:
    > $a = $_GET['a'] ?? 1;

    http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
    sunsh217
        7
    sunsh217  
       Sep 25, 2016
    没有 postgresql, 不及格。退回去重写。
    tanteng
        8
    tanteng  
    OP
       Sep 26, 2016
    @zqhong 你说的对,这里有误
    tanteng
        9
    tanteng  
    OP
       Sep 26, 2016
    @sunsh217 😀
    BMW
        10
    BMW  
       Sep 26, 2016
    讲得有点过于基础了吧,这些不是应该是一个 php 程序员都需要掌握的基础概念么?
    gouchaoer
        11
    gouchaoer  
       Sep 26, 2016 via Android
    请问你怎么看 laravel 性能底下以及过度包装导致的无法单步调试的问题?
    enda
        12
    enda  
       Sep 26, 2016
    请问 CURL 为何归类在调试工具
    frozenshadow
        13
    frozenshadow  
       Sep 26, 2016
    @gouchaoer 没用过 laravel 的请教一下:这么夸张?居然不能单步调试?
    frozenshadow
        14
    frozenshadow  
       Sep 26, 2016
    再请问下 fiddler 和 curl 中间的小蜜蜂是什么。。。
    stackboom
        15
    stackboom  
       Sep 26, 2016   ❤️ 1
    @frozenshadow firebug
    Light3
        16
    Light3  
       Sep 26, 2016
    @frozenshadow 应该是甲虫还是瓢虫吧..
    firebug 一个插件比 F12 好看点? https://getfirebug.com/
    tanteng
        17
    tanteng  
    OP
       Sep 26, 2016
    @BMW 这跟基础无关,而是 PHP 的开发方式,现在能用上这些的占比估计还是小部分,大部分公司还没用上。也许一年以后,这些还是“新”的东西。
    tanteng
        18
    tanteng  
    OP
       Sep 26, 2016
    @enda 没地方放了,哈哈。
    tanteng
        19
    tanteng  
    OP
       Sep 26, 2016
    @frozenshadow firebug
    TangMonk
        20
    TangMonk  
       Sep 26, 2016
    composer 每次只能 require 一个包,这点很难用。。
    gdtv
        21
    gdtv  
       Sep 26, 2016
    php 本来是世界上最容易学的语言( asp 已经过时了不算),经这么折腾, php 这个优点就不复存在了
    acedbs
        22
    acedbs  
       Sep 26, 2016
    支持下,好长时间没用 php 了~
    gdtv
        23
    gdtv  
       Sep 26, 2016
    php 本来是世界上最容易学的语言( asp 已经过时了不算),经这么折腾, php 这个优点就不复存在了。
    每次我写 laravel 的时候我都在想,我是在写 php 呢还是在写 java 呢?
    用 laravel 写了几个项目,最后还是用回 codeigniter 了。
    iyaozhen
        24
    iyaozhen  
       Sep 26, 2016 via Android
    @TangMonk 只能一个包,什么意思?感觉不是啊
    mogp
        25
    mogp  
       Sep 26, 2016
    你访问的页面不存在!
    TangMonk
        26
    TangMonk  
       Sep 26, 2016
    @iyaozhen 比如说吧,你有个 laravel 项目。你要增加一些其他依赖,你只能通过命令行 composer require XXX, 不能直接修改 composer.json 里的 package 。所以当你需要安装大量的包的时候会蛋疼,不想 ruby 的 bundle ,和 NodeJS 的 NPM 那么好用。
    xiaozi
        27
    xiaozi  
       Sep 26, 2016
    总结的写 php 的时候容易掉的坑, http://tool.lu/tip/?q=php
    killerv
        28
    killerv  
       Sep 26, 2016
    @TangMonk 为什么不能直接修改 composer.json ?在 composer.json 里面添加包名,然后 composer update 不行吗?
    ylsc633
        29
    ylsc633  
       Sep 26, 2016
    @xiaozi 这个网站是你的?
    TangMonk
        30
    TangMonk  
       Sep 26, 2016
    @killerv 貌似会把不想 update 的 package 也 update 了
    xiaozi
        31
    xiaozi  
       Sep 26, 2016
    @ylsc633 我的, 怎么了?
    pengbo37877
        32
    pengbo37877  
       Sep 26, 2016
    感觉没什么用啊,用过 laravel 就能总结出这些
    tanteng
        33
    tanteng  
    OP
       Sep 26, 2016
    @pengbo37877 所以说学习现代化 PHP 开发的最好方式是学习现代化的开发框架
    Clarencep
        34
    Clarencep  
       Sep 26, 2016
    居然有人把简历放到博客首页显著位置...
    tanteng
        35
    tanteng  
    OP
       Sep 26, 2016
    @Clarencep 这是个人博客而已,平时也没多少人看,自己的一个工作经历,我也看到好多博客也挂着简历啊,没什么好奇怪的
    kchum
        36
    kchum  
       Sep 26, 2016 via iPhone
    @TangMonk 限定好其他包的版本,不会动到你不想升级的包
    jhdxr
        37
    jhdxr  
       Sep 27, 2016
    @gouchaoer laravel 性能低下这个观点先放一放(毕竟看和什么对比,以及用框架最主要是为了提高开发速度,而性能也没有差到不能忍受),不能单步调试我也想问为什么。。。
    如果你指的是因为 laravel 在很多地方都传递的是闭包 /callback ,而不能直接 step into 的话,那么你可以在闭包里下断点。或者多 step over 一些总能进去的。。。
    如果你指的是因为__call 和__callStatic 导致的 IDE 找不到方法,那么可以考虑 `barryvdh/laravel-ide-helper`
    tanteng
        38
    tanteng  
    OP
       Sep 27, 2016
    @jhdxr @gouchaoer Laravel 其实性能也没那么低吧,把各种缓存打开,上 OPcache ,响应速度超快了。你非要说性能, PHP 的性能肯定不如 java , c ,如果真有这个问题,这部分用其他语言来写就行了, PHP 就负责调接口。
    gouchaoer
        39
    gouchaoer  
       Sep 27, 2016
    @jhdxr laravel 的性能实在是太差了,见 benchmark : https://github.com/kenjis/php-framework-benchmark

    至于无法单步调试的问题,我就一个要求从 index.php 入口开始我 xdebug 单步调试进入框架到路由到 filter 到控制器最后退出,这么多框架只有 laravel 没法做到

    老实说我也关注了一段时间的 laravel ,实在看不出 laravel 美在何处,和 php 最大限度最求性能+实用背道而驰,就像 php 框架中的绿茶婊一样
    jhdxr
        40
    jhdxr  
       Sep 27, 2016
    @gouchaoer 对于性能的观点我依然不变,框架的性能在 99%的场景下还不足以成为瓶颈。开发效率优先。当然我并不否认你的观点和数据(例如各种魔术方法,使用对象而非数组,在 php 里都会导致大幅变慢)

    然后单步的这个需求,我看了一眼我觉得 laravel 也是完全可以做到的啊,也许你需要换个 ide ,例如 phpstorm 就不错。但是,因为 laravel 大量使用了闭包,所以按照你的这个要求,单步会很蛋疼,因为会跳来跳去,而且有大量的例如 pipeline 之类的框架类 /方法在其中。

    框架的喜好各有所爱,同样也不回复了←不想引战
    gouchaoer
        41
    gouchaoer  
       Sep 27, 2016 via Android
    @jhdxr 实际系统中的访问恰恰是命中缓存的情况最多,所以你说实际系统瓶颈在数据库而 helloworld 无法说明问题那是站不住脚的。。。。
    shlabc
        42
    shlabc  
       Oct 3, 2016
    Laravel 刚出来时,感觉真挺美的,也研究了一阵,后来实在受不了速度。最后还是选的 YII2 (在开发团队合作、用户规模、正规化、速度之间取的平衡)。

    一些简单程序,都直接用最原生 PHP 。
    tanteng
        43
    tanteng  
    OP
       Oct 3, 2016
    @shlabc 用 Laravel 自带的路由缓存,配置缓存等,再开启 PHP 的 Opcache ,速度应该很快了啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5823 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 92ms · UTC 06:38 · PVG 14:38 · LAX 23:38 · JFK 02:38
    ♥ Do have faith in what you're doing.