Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP5.3、PHP5.4的特性介绍与深度挖掘

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 PHP5.3、PHP5.4的特性介绍与深度挖掘

Avatar for Allen Liu

Allen Liu

May 27, 2012
Tweet

More Decks by Allen Liu

Other Decks in Programming

Transcript

  1. 命名空间 1. 起名字是个问题。 2. 解决命名冲突的两类方案:人为约定、语 法支持。 3. 其他语言如何解决的 : •

    Python—— 模块就是命名空间。 • JavaScript—— 对象、 with 、匿名函数 。 5
  2. 例子 1 :命名空间 1 <?php namespace test; class Sample{ //some

    code } ?> <?php namespace test1; class Sample{ //some code } ?> 7
  3. 例子 2 :命名空间 2 <?php use test; use test1 as

    t1; $obj1 = new test\Sample(); $obj2 = new t1\Sample(); 8
  4. 何谓延迟静态绑定? class Dad{ public static $name = ‘Jack’; public static

    get_name(){ echo self::$name; } } class Son extends Dad{ public static $name = ‘Jones’; public static get_name(){ echo self::$name; } } Dad::get_name(); Son::get_name(); //output Jack Jack 12
  5. 这就是延迟静态绑定 class Dad{ public static $name = ‘Jack’; public static

    get_name(){ echo self::$name; } } class Son extends Dad{ public static $name = ‘Jones’; public static get_name(){ echo static::$name; } } Dad::get_name(); Son::get_name(); //output Jack Jones 13
  6. 例子 4 :闭包 1 <?php $test = ‘Hello ’; $a

    = function($v) use ($test){ echo $test,$v,PHP_EOL; }; $a(‘world1’); $a(‘world2’); //output Hello world1! Hello world2! 17
  7. 例子 5 :闭包 2 <?php class Test{} Function test(){} define('A','3434');

    $a = function(){ var_dump($_SERVER); var_dump(__FILE__); var_dump(A); test(); new Test; }; $a(); 18
  8. 例子 6 :闭包 3 <?php //5.3 的时候如何引用闭包所在的对象实例 Class Test{ public

    $name = 123; pulic function sample(){ $that = $this; $a = function()use($that){ echo $that->name; }; } } 19
  9. 例子 7 :闭包 4 <?php //5.4 的时候可以直接使用 this Class Test{

    public $name = 123; pulic function sample(){ $a = function(){ echo $this->name; }; } } 20
  10. SplFixedArray • 指定长度的数组。 • 相比 array() 更快。 <?php $array =

    new SplFixedArray(5); $array[1] = 2; echo $array->count(); 27
  11. 其他特性概述 • 增加 goto 语法。 • php.ini 支持 [HOST=] 、

    [PATH=] 设置 。 • 增加 __DIR__ 魔术常量。 30
  12. 例子 8 : traits1 <?php trait Debug{ public $debug_power =

    1; public function back_trace(){ //some code } } class Sample{ use Debug; } 35
  13. 例子 15 : traits5 <?php trait HelloWorld { public function

    sayHello() { echo 'Hello World!'; } } class TheWorldIsNotEnough { use HelloWorld; public function sayHello() { echo 'Hello Universe!'; } } $o = new TheWorldIsNotEnough(); $o->sayHello(); //output Hello Universe 39
  14. 配置项 ; 是否开启 session 记录上传进度 session.upload_progress.enabled = On ; 是否在上传完毕清空进度信息

    session.upload_progress.cleanup = On ; 上传进度信息的 key 前缀 session.upload_progress.prefix = “upload_progress_” ; 上传文件的表单的名字 session.upload_progress.name =‘PHP_SESSION_UPLOAD_PROGRESS’ ; 更新进度的频率 ( 已经处理的字节数 ), ’ 也支持百分比表示 session.upload_progress.freq = "1%" ; 更新进度的时间间隔 ( 秒级 ) session.upload_progress.min_freq = "1" 46
  15. 获取方式 $_SESSION["upload_progress_liuxd"] = array( "start_time" => 1234567890, // 请求时间 "content_length"

    => 57343257, // 上传文件总大小 "bytes_processed" => 453489, // 已经处理的大小 "done" => false, // 当所有上传处理完成后为 TRUE "files" => array( 0 => array( "field_name" => "file1", // 表单中上传框的名字 "name" => "foo.avi", "tmp_name" => "/tmp/phpxxxxxx", "error" => 0, "done" => true, // 当处理完成后会变成 TRUE "start_time" => 1234567890, // 开始处理时间 "bytes_processed" => 57343250, // 已经处理的大小 ), 47
  16. 哪些小清新? • 数组: $a = array() VS $a = []

    • 闭包内直接使用 $this • $obj->get_array()[12]; • (new User())->get_user_info(); 49
  17. php-fpm 立志传 • PHP 5.2.13—— 作为 patch • PHP 5.3.3——

    混进核心扩展库。 • PHP 5.4.0——Removed EXPERIMENTAL flag 经过两年多的奋斗,终于从临时工混成 公务员了! 53
  18. 友情提醒 2012 年 4 月 26 日, PHP 5.4.1 发布

    了。 PHP 5.4 朝着稳定又迈进一步,我们应 该认真做准备来迎接它了。 54