Skip to content

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 服务器
}

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*