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类型

相关文章:
php7类型约束,严格模式
在PHP7之前,函数和类方法不需要声明变量类型 ,任何数据都可以被传递和返回,导致几乎大部分的调用操作都要判断返回的数据类型是否合格。 为了解决这个问题,PHP7引入了类型声明。 目前有两类变量可以声明类型: 形参&a…...
2023-04-11 无向图的匹配问题
无向图的匹配问题 之所以把无向图的这个匹配问题放到最后讲是因为匹配问题借鉴了有向图中一些算法的思想 1 最大匹配和完美匹配 二分图回顾 二分图:把一个图中的所有顶点分成两部分,如果每条边的两端分别属于不同部分,则这个图是二分图。更多…...
国家出手管人工智能AI了
我是卢松松,点点上面的头像,欢迎关注我哦! 全球都在封杀AI,国家也出手了,人工智能AI的强监管来了!这次反应速度算是很快了。国家出手,AI必须管。 国家网信办拟针对生成式人工智能服务出台管理办法&#…...
day24—选择题
文章目录1.将N条长度均为M的有序链表进行合并,合并以后的链表也保持有序,时间复杂度为(A)2.已知某个哈希表的n个关键字具有相同的哈希值,如果使用二次探测再散列法将这n个关键字存入哈希表,至少要进行&…...
自投递简历以来的第一次面试
投完简历之后HR小姐姐接着就安排了面试,原定时间是今天下午六点,我五点五十进的会议,结果等到六点二十(真的有点不耐烦了说实话)面试官打电话过来了说网络不是很好,所以改成电话面试了。 1、session信息保…...
【C++11】新特性 - 右值引用详解
文章目录STD容器使用右值引用场景移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋值运算符。移动语义只对右值有效,对左值无效原因STD容器使用右值引用场景 移动语义在容器中的使用主要体现在两个方面:移动构造函数和移动赋…...
C++学习笔记
C学习笔记函数一般有返回值,构造函数有没有返回值?有返回值,返回一个对象,确定所以没写;在头文件中,防卫式声明,#ifndef…#define … #endif;pass by value或者 reference,传值是整包…...
项目1实现login登录功能方案设计第三版
需求优化点:MySQL表常用功能模块实现方案index页面home页面需求 实现一个登录功能 实现的功能 注册(邮箱注册)登录(邮箱密码)重置密码查看操作记录(登录, 注册, 重置密码, 登出. 都算操作)登出在第2版的基础上进行优化:\ 优化点: VerificationCode(验证码储存库): 增加时间字段…...
Node【七】初识Express框架
文章目录🌟前言🌟Express框架🌟1.什么是框架🌟2.express安装🌟3.创建web服务基本遵循之前的四个步骤:🌟4.路由🌟 由 :请求方式请求路径(1)get发送…...
Android 高通Camera2 Camera Device Close
1、很多人看到这个日志第一感觉可能觉得哪里没有合理释放,于是带着这个思路去进行百度探索 2、一开始我去寻找 ImageReader.OnImageAvailableListener 这个问题 var afterBitmap: Bitmap? null/**监听拍照的图片 */private val imageAvailableListener ImageRead…...
TensorFlow Lite,ML Kit 和 Flutter 移动深度学习:1~5
原文:Mobile Deep Learning with TensorFlow Lite, ML Kit and Flutter 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的…...
4、浅谈Makefile文件及其简单的使用知识
文章目录1、什么是Makefile?(1)makefile关系到了整个工程的编译规则。(2)makefile带来的好处就是——“自动化编译”(3)make是一个命令工具,是一个解释makefile中指令的命令工具2、为…...
5G/V2X赛道「重启」
在提升高阶智能驾驶安全性和感知冗余能力的道路上,除了激光雷达、高精度地图及定位,还有一项技术可能即将掀起一场新的风暴。 就在今年3月,作为全球通信领域的年度风向标 — 2023世界移动通信大会(MWC)上,…...
pytorch进阶学习(四):使用不同分类模型进行数据训练(alexnet、resnet、vgg等)
课程资源:5、帮各位写好了十多个分类模型,直接运行即可【小学生都会的Pytorch】_哔哩哔哩_bilibili 目录 一、项目介绍 1. 数据集准备 2. 运行CreateDataset.py 3. 运行TrainModal.py 4. 如何切换显卡型号 二、代码 1. CreateDataset.py 2.Train…...
Java面向对象高级【注解和反射】
目录 注解 什么是注解? 自定义注解 元注解 反射 什么是反射 静态语言和动态语言 动态语言 静态语言 对比 Class类 Java内存分析 类加载过程 类加载器 获取运行时类的完整结构 通过Class对象实例化对象 1.调用Class对象的newInstance 2.Constructor…...
Pytorch基础 - 4. torch.expand() 和 torch.repeat()
目录 1. torch.expand(*sizes) 2. torch.repeat(*sizes) 3. 两者内存占用的区别 在PyTorch中有两个函数可以用来扩展某一维度的张量,即 torch.expand() 和 torch.repeat() 1. torch.expand(*sizes) 【含义】将输入张量在大小为1的维度上进行拓展,…...
《LeetCode》——LeetCode刷题日记
本期,将给大家带来的是关于 LeetCode 的关于二叉树的题目讲解。 目录 (一)606. 根据二叉树创建字符串 💥题意分析 💥解题思路 (二)102. 二叉树的层序遍历 💥题意分析 &#…...
mysql数据库审计(1)
1.数据库审计工具介绍及选择 1.1. 数据库审计工具介绍 MySQL 分支的审计功能包含在企业版中,社区版可以使用其他分支提供的工具。目前已知的审计工具,社区版本有 Percona 的 Percona Server Audit Log 、MariaDB 的 MariaDB Audit Plugin 和 McAfee 的…...
Kafka---kafka概述和kafka基础架构
kafka概述和kafka基础架构 文章目录kafka概述和kafka基础架构Kafka定义消息队列传统消息队列应用场景缓存/消峰解耦异步通信消息队列的两种模式点对点模式发布/订阅模式kafka基础架构producerConsumerConsumer Group(CG)BrokerTopicPartitionReplicaLead…...
《JavaEE初阶》多线程基础
《JavaEE初阶》多线程基础 文章目录《JavaEE初阶》多线程基础前言:多线程的概念简单创建线程并运行:简述Thread中run方法与start方法的区别创建线程的几种方法:探讨串行执行与并行执行的执行时间多线程的使用场景:Thread类简单介绍:构造方法:获取线程的常见属性:线程的常用方法…...
鸿蒙应用开发实战:手把手教你封装一个可复用的音乐播放器管理类(ArkTS版)
鸿蒙应用开发实战:构建高可复用的音乐播放器管理类(ArkTS版) 在鸿蒙应用开发中,音频播放功能是许多应用的核心需求。本文将深入探讨如何设计一个健壮、可复用的音乐播放器管理类,采用ArkTS语言实现,帮助开发…...
从LC谐振到信号振铃:用Multisim仿真带你理解PCB上的阻尼振荡
从LC谐振到信号振铃:用Multisim仿真揭示PCB阻尼振荡的本质 1. 振铃现象:硬件工程师的"噩梦" 第一次在示波器上看到信号边沿那些诡异的振荡波形时,我差点以为自己的电路板被某种神秘力量干扰了。这种被称为"振铃"的现象…...
Hunyuan-MT-7B开源镜像免配置部署:像素语言传送门一键启动教程(含GPU适配)
Hunyuan-MT-7B开源镜像免配置部署:像素语言传送门一键启动教程(含GPU适配) 1. 项目介绍 像素语言跨维传送门是一款基于Tencent Hunyuan-MT-7B大模型构建的创新翻译工具。它将传统翻译体验重构为16-bit像素冒险风格,让语言转换变…...
pvr.iptvsimple技术解构:IPTV直播系统构建的底层逻辑与实践指南
pvr.iptvsimple技术解构:IPTV直播系统构建的底层逻辑与实践指南 【免费下载链接】pvr.iptvsimple IPTV Simple client for Kodi PVR 项目地址: https://gitcode.com/gh_mirrors/pv/pvr.iptvsimple 问题定位:IPTV直播系统的技术痛点与架构挑战 IP…...
实战演练:基于快马平台生成学生成绩排名系统,掌握排序算法应用
最近在做一个学生成绩管理系统的实战项目,其中排序功能是核心模块。通过这个项目,我深刻体会到排序算法在实际应用中的重要性。下面分享一下我的实现思路和经验总结。 学生类设计 首先需要定义一个学生类,包含学号、姓名、各科成绩和总成绩等…...
SpringBoot3.3.1+Elasticsearch8.13.4日期转换踩坑实录:LocalDateTime保存为时间戳的完整方案
SpringBoot3.3.1与Elasticsearch8.13.4时间类型转换实战:从踩坑到优雅解决 最近在升级技术栈到SpringBoot3.3.1时,发现与Elasticsearch8.13.4的集成出现了一个棘手的问题:LocalDateTime类型在保存和查询时表现异常。这让我花了整整两天时间排…...
Czkawka:用Rust构建的开源存储清理工具全解析
Czkawka:用Rust构建的开源存储清理工具全解析 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 一、场景痛点:当代存储管理的…...
保姆级教程:用Docker Compose一键部署Dify AI平台(附国内镜像加速与端口冲突解决)
零门槛部署Dify AI开发平台:Docker Compose全流程指南与避坑手册 在AI应用开发领域,快速搭建一个稳定可靠的开发环境往往是项目成功的第一步。Dify作为一款面向开发者的AI应用开发平台,通过可视化编排和低代码方式大大降低了构建基于大语言模…...
基于机器学习的驾驶疲劳检测,应该如何入门?
基于机器学习的驾驶疲劳检测可以说是本科/硕士毕设中性价比很高的一个题目:它既有充足的开源参考资料,又容易做出可视化的Demo,答辩时也比较讨喜。 我来帮你把这个看似庞大的项目拆解成流水线。 你不需要去手搓底层的神经网络,只…...
别再只查列表了!Flowable 7.x 待办任务‘状态’字段的实战设计与前端动态渲染
Flowable 7.x 待办任务状态引擎设计与前端动态交互实战 在当今企业级应用开发中,工作流引擎已成为复杂业务流程管理的核心基础设施。作为Activiti的下一代产品,Flowable 7.x在任务状态管理和前后端协同方面提供了更强大的能力。本文将深入探讨如何基于Fl…...
