More Related Content Similar to 课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘 Similar to 课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘 (20) 课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘11. PHP5.3特性
• 命名空间
• 延迟静态绑定
• 闭包
• SPL
• 其他特性概述
11
12. 何谓延迟静态绑定?
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
13. 这就是延迟静态绑定
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
15. PHP5.3特性
• 命名空间
• 延迟静态绑定
• 闭包
• SPL
• 其他特性概述
15
17. 例子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
23. PHP5.3特性
• 命名空间
• 延迟静态绑定
• 闭包
• SPL
• 其他特性概述
23
26. SplFileInfo
<?php
$info = new SplFileInfo(‘/home/example.php');
if ($info->isFile()) {
echo $info->getRealPath();
echo $info->getFilename();
}
26
29. PHP5.3特性
• 命名空间
• 延迟静态绑定
• 闭包
• SPL
• 其他特性概述
29
34. 什么是Traits?
• 看起来像类,但不是类。
• 不是接口,但可以多个共存。
• 不能独立使用,只能依附于类。
• 不可继承。
• 不能实现接口。
34
39. 例子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
40. 语法补充
• 可以有静态成员。
• 可以有抽象方法。
• 新增函数:trait_exists
• 暂不支持autoload
40
41. 价值挖掘
• 新的代码重用方式。
• 多继承的另类替代方案。
• 相比类耦合更简单。
• 相比函数表达能力更强。
• 天生就是好拦截器。
41
47. 获取方式
$_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
49. 哪些小清新?
• 数组:$a = array() VS $a = []
• 闭包内直接使用$this
• $obj->get_array()[12];
• (new User())->get_user_info();
49