PHP 新特性
现代的 PHP 语言有很多令人兴奋的新特性,这些新特性让 PHP 语言变成了一个强大的平台,为构建 Web 应用和命令行工具提供了愉快的体验。
这些特性中有些不是必不可少的,不过能让我们的开发工作更轻松。而有些特性则非常重要,例如命名空间,这是现代 PHP 标准的基础,能让现代的 PHP 开发者顺其自然地使用一些开发实践(例如自动加载)。
1. 性状
性状是 PHP 5.4.0 引入的新概念,是类的部分实现,可以混入一个或多个现有的 PHP 类中。
性状有两个作用:表明类可以做什么(像是接口);提供模块化实现(像是类)。
<?php
// 定义性状
trait MyTrait {
// 这里是性状的实现
}
// 使用性状
class MyClass
{
use MyTrait;
// 这里是类的实现
}
2. 生成器
PHP 生成器(generator)是 PHP 5.5.0 引入的功能。生成器是简单的迭代器,与标准的 PHP 迭代器不同,PHP 生成器不要求类实现 Iterator 接口,从而减轻了类的负担。
<?php
// 一个简单的生成器
function myGenerator() {
yield 'value1';
yield 'value2';
yield 'value3';
}
// 调用并迭代生成器
foreach (myGenerator() as $yieldedValue) {
echo $yieldedValue, PHP_EOL;
}
上述代码的输出如下:
value1
value2
value3
3. 闭包
闭包和匿名函数在 PHP 5.3.0 中引入。闭包是指在创建时封装周围状态的函数。匿名函数其实就是没有名称的函数。
注意:理论上讲,闭包和匿名函数是不同的概念。不过,PHP 将其视作相同的概念。
<?php
// 创建闭包
$closure = function($name) {
return sprintf('Hello %s', $name);
};
echo $closure("Josh");
// 输出 --> "Hello Josh"
// 把状态附加到 PHP 闭包上
function enclosePerson($name) {
return function($doCommand) use ($name) {
return sprintf('%s, %s', $name, $doCommand);
};
}
// 把字符串 "Clay" 封装在闭包中
$clay = enclosePerson('Clay');
// 传入参数,调用闭包
echo $clay('get me sweet tea!');
// 输出 --> "Clay, get me sweet tea!"
具名函数 enclosePerson() 有个名为 $name 的参数,这个函数返回一个闭包对象,而且这个闭包封装了 $name 参数。
4. 内置的 HTTP 服务器
从 PHP 5.4.0 起,PHP 内置了 Web 服务器。
// 打开终端,进入项目根目录,本地启动一个监听端口为 4000 的 PHP Web 服务器
php -S localhost:4000
// 使用指定的初始化文件
php -S localhost:4000 -c app/config/php.ini
// 查明使用的是否为内置的服务器
if (php_sapi_name() === 'cli-server') {
// PHP 内置的 Web 服务器
} else {
// 其他 Web 服务器
}