开发者学堂课程【PHP 基础入门课程(下):强类型返回值】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/710/detail/12638
强类型返回值
内容介绍:
一、概念
二、代码示例
三、小结
一、概念
强类型返回值:指在函数定义时就规定好函数的返回值类型。
1、强类型是 PHP 的8种类型
2、强类型规定后,函数内部的返回值必须是指定类型。(否则系统会报错。)
3、想让强类型完全生效,需要提前声明
(1)declare(strict_types = 1)
4、强类型返回值语法
5、function 函数名():返回值类型{}
二、代码示例
示例:
#判定数据是否是整形
function is_my_int($n):bool{
if(is_integer($n)){
return TRUE;}e1se{
return 'no';
is_my_int(3.1);
#报错:返回值类型必须是布尔类型,返回了一个字符串。
需要提前给一个 bool ,是整型返回 TRUE,否则返回 no,当然 no 不是布尔类型,那就要去检测是否能够成功。
实例:
#强制返回值类型
function is_my_int1($n){
if(is_integer($n)) return TRUE;
else return 'no';}
// var_dump(is_my_int1('hello'));
//结果错误
明显不是一个整型,运行结果如下图,得到一个 no,没有任何的说明,因为返回什么类型没有规定,所以给什么类型就是什么类型。
所以这样不够精确,想要更精确换种方式,
function is_my_int2($n):bool{
if(is integer($n))
return TRUE;
else return 'no';
#在没有开启强类型检查,虽然规定了返回值为 bool 类型,但是系统不强制检查,但会强制转换。
//如果将此处改为空值,结果返回 flase 。
var dump(is my_int2(1));
var dump(is_my_int2(1.1));
运行结果如下图,发现结果为 bool(true),
难道是判定 is_integer 走 return TRUE,要注意,#在没有开启强类型检查,虽然规定了返回值为 bool 类型,但是系统不强制检查,但会强制转换 。也就是把 no 字符串转化成布尔,no 的布尔为 TRUE,把 no 改成空字符串,
#强制返回值类型
function is_my_int1($n){
if(is_integer($n)) return TRUE;
else return 'no';}
// var_dump(is_my_int1('hello'));
//结果错误
function is_my_int2($n):bool{
if(is integer($n))
return TRUE;
//else return '';
#在没有开启强类型检查,虽然规定了返回值为 bool 类型,但是系统不强制检查,但会强制转换 。
//如果将此处改为空值,结果返回 flase 。
else return flase
//保证返回值类型本身是 bool 类型。
var dump(is my_int2(1));
var dump(is_my_int2(1.1));
返回结果是 false,所以说明在 else return 位置进行转换,也能达到强制的类型,但与目标还是有点区别,所以想要解决问题时需要用到 declare(strict_types = 1)告知系统我们必要严格检查,
添加 declare(strict_types = 1)如上图,运行结果
错误原因是声明要放到最前面,刷新,
此时错误为必须为布尔类型,所以把 else return ''改成 else return false,刷新,
保证返回值类型本身的类型是 bool ,而不是系统帮助转成 bool,前面是没开启强类型检查,自动转化成 bool。
三、小结
1、强类型返回值是在定义函数时规定
(1)规定返回值类型
(2)在函数内部使用返回值时必须对应返回值类型
2、强类型返回值的作用
保证数据的规范性(对外提供规范数据) // 系统检查在定义时返回值是否能够达到预期的目标,帮助代码使用更加方便。
3、想让强类型返回值生效,依赖强类型开启
(1)在脚本前面添加:declare(strict_types=1)