标量类型声明

默认情况下,所有的PHP文件都处于弱类型校验模式。

PHP 7 增加了标量类型声明的特性,标量类型声明有两种模式:

  • 强制模式 (默认)
  • 严格模式

标量类型声明语法格式:

declare(strict_types=1);

代码中通过指定 strict_types的值(1或者0),1表示严格类型校验模式,作用于函数调用和返回语句;0表示弱类型校验模式。

可以使用的类型参数有:

  • int

  • float

  • bool

  • string

  • interfaces

  • array

  • callable

强制模式实例

实例

<?php 
// 强制模式 
function sum(int ...$ints) 

   return array_sum($ints); 
}

print(sum(2, '3', 4.1)); 
?>

以上程序执行输出结果为:

9

实例汇总将参数 4.1 转换为整数 4 后再相加。

严格模式实例

实例

<?php 
// 严格模式 
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……

返回类型声明

PHP 7 增加了对返回类型声明的支持,返回类型声明指明了函数返回值的类型。

可以声明的返回类型有:

  • int

  • float

  • bool

  • string

  • interfaces

  • array

  • callable

返回类型声明实例

实例中,要求返回结果为整数:

实例

<?php 
declare(strict_types=1);

function returnIntValue(int $value): int 

   return $value; 
}

print(returnIntValue(5)); 
?>

以上程序执行输出结果为:

5

返回类型声明错误实例

实例

<?php 
declare(strict_types=1);

function returnIntValue(int $value): int 

   return $value + 1.0; 
}

print(returnIntValue(5)); 
?>

以上程序由于采用了严格模式,返回值必须是 int,但是计算结果是float,所以会报错,执行输出结果为:

Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...

void 函数

一个新的返回值类型void被引入。 返回值声明为 void 类型的方法要么干脆省去 return 语句,要么使用一个空的 return 语句。 对于 void 函数来说,NULL 不是一个合法的返回值。

返回的类型还有 void,定义返回类型为 void 的函数不能有返回值,即使返回 null 也不行。

void 函数可以省去 return 语句,或者使用一个空的 return 语句。

实例

<?php
function swap(&$left, &$right) : void
{
    if ($left === $right) {
        return;
    }

$tmp = $left;
    $left = $right;
    $right = $tmp;
}

$a = 1;
$b = 2;
var_dump(swap($a, $b), $a, $b);

以上实例输出结果:

null
int(2)
int(1)

最新文章

  1. iOS动态部署之RSA加密传输Patch补丁
  2. 【Alpha】十天屠龙记
  3. C学习笔记
  4. 创建catalog数据库
  5. jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
  6. System.Windows.Forms.Timer与System.Timers.Timer的区别(zz)
  7. 什么是边界扫描(boundary scan)?
  8. ecshop 改变sitemap.xml的位置
  9. SuperToolTips
  10. LinuxShell_variable+if+while
  11. Linux下设置静态IP和获取动态IP的方法
  12. 在virtualenv中安装libxml2和libxslt
  13. Quick Cocos2dx 与 DragonBones
  14. [ZOJ 4016] Mergable Stack
  15. C++跨平台集成websocketpp
  16. [SQL Server] sysobjects的介紹
  17. 探秘 Java 热部署二(Java agent premain)
  18. Gulp Error: Cannot find module &#39;jshint/src/cli&#39;
  19. 【noip模拟赛7】足球比赛 树
  20. 无状态shiro认证组件(禁用默认session)

热门文章

  1. vue项目chunk包loading失败解决办法
  2. Spring笔记(3) - debug源码AOP原理解析
  3. 记一次解密wireshark抓取的冰蝎通信流量
  4. 大厂前端带来css3动画transition的使用和介绍全新认识动画
  5. Serverless介绍篇(一)云开发在Serverless方面取得了怎样的新成果?
  6. Window - 安装 Jenkins
  7. Prometheus + Grafana 监控系统搭
  8. js 声明变量规范和特殊变量情况
  9. Shaderlab-10chapter-立方体纹理、玻璃效果
  10. git的工作区和暂存区