强类型返回值|学习笔记

简介: 快速学习强类型返回值

开发者学堂课程【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,没有任何的说明,因为返回什么类型没有规定,所以给什么类型就是什么类型。

image.png

所以这样不够精确,想要更精确换种方式,

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),

image.png

难道是判定 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));

image.png

返回结果是 false,所以说明在 else return 位置进行转换,也能达到强制的类型,但与目标还是有点区别,所以想要解决问题时需要用到 declare(strict_types = 1)告知系统我们必要严格检查,

image.png

添加 declare(strict_types = 1)如上图,运行结果

image.png

错误原因是声明要放到最前面,刷新,

image.png

此时错误为必须为布尔类型,所以把 else return ''改成 else return false,刷新,

image.png

保证返回值类型本身的类型是 bool ,而不是系统帮助转成 bool,前面是没开启强类型检查,自动转化成 bool。


三、小结

1、强类型返回值是在定义函数时规定

(1)规定返回值类型

(2)在函数内部使用返回值时必须对应返回值类型

2、强类型返回值的作用

保证数据的规范性(对外提供规范数据) // 系统检查在定义时返回值是否能够达到预期的目标,帮助代码使用更加方便。

3、想让强类型返回值生效,依赖强类型开启

(1)在脚本前面添加:declare(strict_types=1)

相关文章
|
前端开发 数据库 微服务
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
2192 0
JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)
|
敏捷开发 存储 搜索推荐
《阿里巴巴Java开发手册v1.4.0(详尽版)》更新,新增16条设计规约
阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。
738840 3
|
12月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
Android开发
Cocos Creator 花了一个月入门经历
一个与人入门算是最笨的那种了吧 分享给大家入门视频教程
1192 0
Cocos Creator 花了一个月入门经历
|
数据采集 机器学习/深度学习 数据挖掘
基于Python实现时间序列分析建模(ARIMA模型)项目实战
基于Python实现时间序列分析建模(ARIMA模型)项目实战
|
安全 网络协议 网络安全
HTTPS 存在哪些安全问题,有什么应对方案
HTTPS 是 HTTP 的安全版本,通过使用 SSL/TLS 协议对通信内容进行加密,提供了以下几个关键的安全特性:数据加密、身份认证和完整性保护。尽管 HTTPS 在很大程度上提高了安全性和数据传输的安全性,但仍然存在一些潜在的安全问题。以下是一些可能的问题以及相应的应对方案
|
安全 Linux 网络安全
如何使用Nmap进行端口扫描和服务识别?
如何使用Nmap进行端口扫描和服务识别?
1408 0
|
JSON IDE 安全
为什么阿里巴巴禁止开发人员使用isSuccess作为变量名
在定义一个布尔类型的变量,尤其是一个给外部提供的接口返回值时,要使用success来命名,阿里巴巴Java开发手册建议使用封装类来定义POJO和RPC返回值中的变量。但是这不意味着可以随意的使用null,我们还是要尽量避免出现对null的处理的。
为什么阿里巴巴禁止开发人员使用isSuccess作为变量名
|
SQL 缓存
DTS同步DDL的策略
   DTS增量迁移/同步在同步源库的DML操作到目标库时是并发执行的,而同步DDL操作则是串行执行的,其主要过程如下: (1).解析ddl涉及到的库表列,如果该ddl涉及到的库表列都不在迁移或者同步列表中则过滤该ddl,否则执行该ddl; (2).
2837 0