当前位置: 首页 > news >正文

php7类型约束,严格模式

在PHP7之前,函数和类方法不需要声明变量类型

,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。

为了解决这个问题,PHP7引入了类型声明。

目前有两类变量可以声明类型: 形参,返回值。

支持的类型有整形,浮点型,字符串型,布尔型。

简单的代码演示

    public function demo(int $num){return $num;}public function aa(){return  $this->demo(11);}

上面代码的demo方法定义形参的类型为int类型,浏览器访问调用aa方法返回值为11

这时候如果传入字符串类型的参数进去

    public function aa(){return  $this->demo('你好');}

浏览器访问调用aa方法直接报错

而有些情况下,php判断也是不严谨的

    public function demo(int $num){return $num;}public function aa(){return  $this->demo('11');}

这个时候传入进去的参数其实是字符串,但是浏览器访问调用aa方法没有报错,返回值为11,所以这样就不算严谨了

在php7后面的版本中引入了开启严格模式去解决上面的问题

关键字declare

如要强制性约束类型,可在文件头部添加declare声明:

 开启了严格模式之后

这时候在测试一下上面的案例,发现编辑器语法上面就已经报错了,浏览器运行一下果然报错:

只有严格定义传入的参数是int类型才可以

如果不做类型强制约束,那么PHP会将返回的数据转化为指定类型的数据再返回,目前差不多只有string无法强转为int才会报错。

如果指定了强制约束,那么PHP将不会进行类型转换,而是进行对比,如类型不同,则报错。

返回类型声明

第一次看到这种写法觉得很陌生,也是php7后面引进的写法

<?phpdeclare(strict_types=1);
//php7中引入的内容 strict_types=1 针对参数类型开启严格模式,进行数据类型检验,默认是弱类型校验
// 哪个文件写了declare,哪个文件中的所有代码就需要检查namespace app\admin\controller;class Index
{public function demo(string $num): string{return $num;}public function aa(){return  $this->demo('测试内容');}
}

demo方法形参的括号后面加冒号加类型即可指定方法返回值的类型,指定了什么类型返回的就是什么类型,上面demo方法的形参定义为string类型,返回值的类型也定义为string类型

稍微改变一下

<?phpdeclare(strict_types=1);
//php7中引入的内容 strict_types=1 针对参数类型开启严格模式,进行数据类型检验,默认是弱类型校验
// 哪个文件写了declare,哪个文件中的所有代码就需要检查namespace app\admin\controller;class Index
{public function demo(int $num): int{return $num + 10.5;}public function aa(){return  $this->demo(11);}
}

这时候开启严格模式,规定demo方法返回值的类型为int类型,浏览器运行一下就报错了

因为返回的值类型是float浮点类型,而不是定义的int类型

 

http://www.lryc.cn/news/59738.html

相关文章:

  • 2023-04-11 无向图的匹配问题
  • 国家出手管人工智能AI了
  • day24—选择题
  • 自投递简历以来的第一次面试
  • 【C++11】新特性 - 右值引用详解
  • C++学习笔记
  • 项目1实现login登录功能方案设计第三版
  • Node【七】初识Express框架
  • Android 高通Camera2 Camera Device Close
  • TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
  • 4、浅谈Makefile文件及其简单的使用知识
  • 5G/V2X赛道「重启」
  • pytorch进阶学习(四):使用不同分类模型进行数据训练(alexnet、resnet、vgg等)
  • Java面向对象高级【注解和反射】
  • Pytorch基础 - 4. torch.expand() 和 torch.repeat()
  • 《LeetCode》——LeetCode刷题日记
  • mysql数据库审计(1)
  • Kafka---kafka概述和kafka基础架构
  • 《JavaEE初阶》多线程基础
  • 技术分享 | OMS 初识
  • 【Elastic (ELK) Stack 实战教程】10、ELK 架构升级-引入消息队列 Redis、Kafka
  • 优先、双端队列-我的基础算法刷题之路(八)
  • Python3 os.symlink() 方法、Python 质数判断
  • P1972 [SDOI2009] HH的项链
  • ​力扣解法汇总1026. 节点与其祖先之间的最大差值
  • 010:Mapbox GL移动鼠标mousemove,显示坐标信息
  • 【两阶段鲁棒优化】利用列-约束生成方法求解两阶段鲁棒优化问题(Python代码实现)
  • 百度暑期实习 C++ 一面
  • 计算机网络第一章(概述)【湖科大教书匠】
  • 【JS】vis.js使用之vis-timeline使用攻略,vis-timeline在vue3中实现时间轴、甘特图