×
PHP 7新特性简单认识PHP7如何配置PHP7环境如何在Linux/Unix上安装PHP在Mac OS X系统中的安装PHP使用IIS在Windows上安装PHPApache如何在Windows上安装PHP7功能之标量类型声明返回类型声明在PHP中的使用PHP7空合并运算符如何使用PHP7中如何使用太空船操作符PHP7定义常量数组和匿名类PHP7中Closure :: call使用示例如何使用过滤unserialize()函数PHP7如何使用IntlChar伪随机数产生器CSPRNGPHP7的期望是如何使用的?PHP7如何使用use语句如何进行错误处理的?PHP是如何计算整数除法的?什么是PHP7的Session选项PHP7弃用了哪些功能PHP7中移除的扩展和SAPI

PHP7更新记录

PHP7.2.0 RC6 发布,修复bug

PHP7功能之标量类型声明


在 PHP7 中为了提高执行效率,引入了一个新的功能,即在函数方法中增加了 Scalar 类型声明(标量类型声明),这样做节省了对数据类型的检测。标量类型声明有如下的两个选项:

  • 强制模式:强制是默认的模式,不需要指定。
  • 严格模式:严格的模式必须明确暗示。RFC 给每一个 PHP 文件,添加一句新的可选指令(declare(strict_type=1);),让同一个 PHP 文件内的全部函数调用和语句返回,都有一个“严格约束”的标量类型声明检查。

可以使用上述模式强制执行以下类型的函数参数:

  • int
  • float
  • bool
  • string
  • interfaces
  • array
  • callable

强制模式-示例

<?php
   // Coercive mode
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1));
?>

运行上述代码,它产生以下浏览器输出:

9

严格模式-示例

<?php
   // Strict mode
   declare(strict_types=1);
   function sum(int ...$ints) {
      return array_sum($ints);
   }
   print(sum(2, '3', 4.1));
?>

运行上述代码,它产生以下浏览器输出:

PHP Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in /soft/node/run.php on line 7 and defined in /soft/node/run.php:4 Stack trace: #0 /soft/node/run.php(7): sum(2, '3', 4.1) #1 {main} Next TypeError: Argument 3 passed to sum() must be of the type integer, float given, called in /soft/node/run.php on line 7 and defined in /soft/node/run.php:4 Stack trace: #0 /soft/node/run.php(7): sum(2, '3', 4.1) #1 {main} thrown in /soft/node/run.php on line 4

严格模式的校验行为:严格的类型校验调用拓展或者 PHP 内置函数,会改变 zend_parse_parameters 的行为。特别注意,失败的时候,它会产生E_RECOVERABLE_ERROR 而不是E_WARNING。严格类型校验规则是非常直接的:只有当类型和指定类型声明匹配,它才会接受,否则拒绝。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)