PHP 7 详解
  • 介绍
  • PHP 7 安装
  • PHP 7.0.x 新特性
    • OOP 特性
      • 类型声明
      • 命名空间与use关键词批量声明
      • 匿名类
      • Throwable 接口
    • 新增操作符
      • 太空飞船操作符(<=>)
      • null 合并运算符(??)
    • 统一变量语法
    • 其他特性和变更
      • 常量数组
      • Switch 中的多个default默认值
      • Session_start 函数中的参数数组
      • Unserialize 函数引入过滤器
      • 整数除法函数 intdiv()
      • 补充*其他特性和变更
    • 补充*新函数
    • 补充*新的全局常量
    • 补充*变更的函数
    • 补充*摒弃一些老式的写法
    • 补充*不向后兼容的变更
    • 补充*在SAPI模块的变化
    • 补充*PHP7底层性能优化
  • PHP 7.1.x 新特性
    • 新特性
      • 可为空(Nullable)类型
      • 对称阵列解构
      • Void 函数
      • 类常量访问权限控制
      • 多异常捕获处理
      • list()现在支持键名
      • 支持为负的字符串偏移量
      • 补充*其他特性与变更
    • 补充*新的函数
    • 补充*新增的全局常量
    • 补充:不向后兼容的变更
    • 补充*废弃的特性
    • 补充*变更的函数
    • 补充*其他的变更
  • PHP7 开发工具
    • Eclipse 安装与配置
  • PHP 标准规范及开发技巧
    • PHP 标准规范 - PSR
    • PHP 开发技巧
    • 面向对象编程的基本原则
  • PHP7调试与性能分析
    • 调试 - Xdebug安装配置
      • 使用Eclipse调试
    • 性能分析 - Xhprof
    • 性能分析 - Vld
  • 附录*Ubuntu环境php开发配置
  • 附录*使用php开发扩展
  • 附录*浏览器插件
  • 附录*第三方类库
  • 附录*小问题整理
  • 附录*资料*工具
  • 附录*Composer
  • 附录*前端
  • 附录*进程
  • 附录*PHP的ticks机制
  • 附录* 通过composer发布自己的包
  • 附录*字符编码问题
  • 附录*注释
Powered by GitBook
On this page
  • 目录:
  • Unicode codepoint 转译语法
  • Closure::call()
  • IntlChar
  • 预期
  • 生成器可以返回表达式
  • Generator delegation
  • preg_replace_callback_array()
  • CSPRNG Functions
  • 可以使用 list() 函数来展开实现了ArrayAccess接口的对象
  • 允许在克隆表达式上访问对象成员
  • 可以使用关键词作为方法名

Was this helpful?

  1. PHP 7.0.x 新特性
  2. 其他特性和变更

补充*其他特性和变更

目录:

  • Unicode codepoint 转译语法

  • Closure::call()

  • IntlChar

  • 预期

  • 生成器可以返回表达式

  • Generator delegation

  • preg_replace_callback_array()

  • CSPRNG Functions

  • 可以使用list()函数来展开实现了ArrayAccess接口的对象

  • 允许在克隆表达式上访问对象成员

  • 可以使用关键词作为方法名(链式操作)

Unicode codepoint 转译语法

这接受一个以16进制形式的 Unicode codepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。 可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。

echo "\u{aa}";
echo "\u{0000aa}";
echo "\u{9999}";

以上例程会输出:

ª
ª (same as before but with optional leading 0's)
香

Closure::call()

Closure::call()现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。

<?php
class A {private $x = 1;}

// PHP 7 之前版本的代码
$getXCB = function() {return $this->x;};
$getX = $getXCB->bindTo(new A, 'A'); // 中间层闭包
echo $getX();

// PHP 7+ 及更高版本的代码
$getX = function() {return $this->x;};
echo $getX->call(new A);

以上例程会输出:

1
1

IntlChar

<?php

printf('%x', IntlChar::CODEPOINT_MAX);
echo IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));

以上例程会输出:

10ffff
COMMERCIAL AT
bool(true)

预期

<?php
ini_set('assert.exception', 1);

class CustomError extends AssertionError {}

assert(false, new CustomError('Some error message'));
?>

以上例程会输出:

Fatal error: Uncaught CustomError: Some error message

生成器可以返回表达式

此特性基于 PHP 5.5 版本中引入的生成器特性构建的。 它允许在生成器函数中通过使用return语法来返回一个表达式 (但是不允许返回引用值), 可以通过调用Generator::getReturn()方法来获取生成器的返回值, 但是这个方法只能在生成器完成产生工作以后调用一次。

<?php

$gen = (function() {
    yield 1;
    yield 2;

    return 3;
})();

foreach ($gen as $val) {
    echo $val, PHP_EOL;
}

echo $gen->getReturn(), PHP_EOL;

以上例程会输出:

1
2
3

在生成器中能够返回最终的值是一个非常便利的特性, 因为它使得调用生成器的客户端代码可以直接得到生成器(或者其他协同计算)的返回值, 相对于之前版本中客户端代码必须先检查生成器是否产生了最终的值然后再进行响应处理 来得方便多了。

Generator delegation

<?php

function gen()
{
    yield 1;
    yield 2;

    yield from gen2();
}

function gen2()
{
    yield 3;
    yield 4;
}

foreach (gen() as $val)
{
    echo $val, PHP_EOL;
}

?>

以上例程会输出:

1
2
3
4

preg_replace_callback_array()

现在,可以使用一个关联数组来对每个正则表达式注册回调函数, 正则表达式本身作为关联数组的键, 而对应的回调函数就是关联数组的值。

CSPRNG Functions

可以使用 list() 函数来展开实现了ArrayAccess接口的对象

允许在克隆表达式上访问对象成员

允许在克隆表达式上访问对象成员,例如: (clone $foo)->bar()。

可以使用关键词作为方法名

放宽保留字限制,场景为链式操作时.

全局保留的单词作为属性、常量和方法名称在类、接口和特性中被允许。当引入新的关键字并避免对api的命名限制时,这会减少BC的表面。

这在创建具有连贯接口的内部DSLs时特别有用:

<?php
// 'new', 'private', and 'for' were previously unusable
Project::new('Project Name')->private()->for('purpose here')->with('username here');
?>

唯一的限制是类关键字仍然不能用作常量名称,否则它将与类名解析语法(ClassName:class)相冲突。

Previous整数除法函数 intdiv()Next补充*新函数

Last updated 6 years ago

Was this helpful?

新增加的类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。

若要使用此类,请先安装扩展

是向后兼用并增强之前的的方法。 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。

老版本的API出于兼容目的将继续被维护,现在是一个语言结构,它允许第一个参数是一个表达式,而不仅仅是一个待计算的或一个待测试的。

关于这个特性的完整说明,包括如何在开发和生产环境中配置它,可以在的章节找到。

现在,只需在最外层生成其中使用 , 就可以把一个生成器自动委派给其他的生成器,Traversable 对象或者 。

在 PHP 7 之前,当使用

函数的时候, 由于针对每个正则表达式都要执行回调函数,可能导致过多的分支代码。 而使用新加的 函数, 可以使得代码更加简洁。

新加入两个跨平台的函数:和用来产生高安全级别的随机字符串和随机整数。

在之前版本中,函数不能保证 正确的展开实现了ArrayAccess接口的对象, 现在这个问题已经被修复。

详见:

IntlChar
Intl
预期
assert()
assert()
string
boolean
assert()
expectations section
yield from
array
preg_replace_callback()
preg_replace_callback_array()
random_bytes()
random_int()
list()
http://php.net/manual/zh/migration70.other-changes.php