PH P5.2至5.5、5.6的新增功能详解(4)

这是非常方便的一项特征!

// 原来的数组写法 $arr = array("key" => "value", "key2" => "value2"); // 简写形式 $arr = ["key" => "value", "key2" => "value2"]; Traits

所谓Traits就是“构件”,是用来替代继承的一种机制。PHP中无法进行多重继承,但一个类可以包含多个Traits.

// Traits不能被单独实例化,只能被类所包含 trait SayWorld { public function sayHello() { echo 'World!'; } } class MyHelloWorld { // 将SayWorld中的成员包含进来 use SayWorld; } $xxoo = new MyHelloWorld(); // sayHello() 函数是来自 SayWorld 构件的 $xxoo->sayHello();

Traits还有很多神奇的功能,比如包含多个Traits, 解决冲突,修改访问权限,为函数设置别名等等。
Traits中也同样可以包含Traits. 篇幅有限不能逐个举例,详情参见官网 [注].

注:

内置 Web 服务器

PHP从5.4开始内置一个轻量级的Web服务器,不支持并发,定位是用于开发和调试环境。

在开发环境使用它的确非常方便。

php -S localhost:8000

这样就在当前目录建立起了一个Web服务器,你可以通过 :8000/ 来访问。
其中localhost是监听的ip,8000是监听的端口,可以自行修改。

很多应用中,都会进行URL重写,所以PHP提供了一个设置路由脚本的功能:

php -S localhost:8000 index.php

这样一来,所有的请求都会由index.php来处理。

你还可以使用 XDebug 来进行断点调试。

细节修改

PHP5.4 新增了动态访问静态方法的方式:

$func = "funcXXOO"; A::{$func}();

新增在实例化时访问类成员的特征:

(new MyClass)->xxoo();

新增支持对函数返回数组的成员访问解析(这种写法在之前版本是会报错的):

print func()[0]; PHP5.5

(2013起)

yield

yield关键字用于当函数需要返回一个迭代器的时候, 逐个返回值。

function number10() { for($i = 1; $i <= 10; $i += 1) yield $i; }

该函数的返回值是一个数组:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] list() 用于 foreach

可以用 list() 在 foreach 中解析嵌套的数组:

$array = [ [1, 2, 3], [4, 5, 6], ]; foreach ($array as list($a, $b, $c)) echo "{$a} {$b} {$c}\n";

结果:

1 2 3 4 5 6 细节修改

不推荐使用 mysql 函数,推荐使用 PDO 或 MySQLi, 参见前文。
不再支持Windows XP.

可用 MyClass::class 取到一个类的完整限定名(包括命名空间)。

empty() 支持表达式作为参数。

try-catch 结构新增 finally 块。

PHP5.6 更好的常量

定义常量时允许使用之前定义的常量进行计算:

const A = 2; const B = A + 1; class C { const STR = "hello"; const STR2 = self::STR + ", world"; }

允许常量作为函数参数默认值:

function func($arg = C::STR2) 更好的可变函数参数

用于代替 func_get_args()

function add(...$args) { $result = 0; foreach($args as $arg) $result += $arg; return $result; }

同时可以在调用函数时,把数组展开为函数参数:

$arr = [2, 3]; add(1, ...$arr); // 结果为 6 命名空间

命名空间支持常量和函数:

namespace Name\Space { const FOO = 42; function f() { echo __FUNCTION__."\n"; } } namespace { use const Name\Space\FOO; use function Name\Space\f; echo FOO."\n"; f(); }

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/aa4f52796f61bd07e5bacf882571a99f.html