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

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

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

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