php7类型约束,严格模式

news2024/9/29 7:30:18

在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后面引进的写法

<?php

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

稍微改变一下

<?php

declare(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.coloradmin.cn/o/429594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年贵州建筑八大员考试时间报名时间是什么时间呢?甘建二

2023年贵州建筑八大员考试时间报名时间是什么时候开始呢&#xff1f;贵州建筑八大员考试时间是什么时候呢&#xff1f;什么时候考试呢&#xff1f; 建筑八大员主要是用于企业资质、招投标、检查使用&#xff0c;目前很多企业急需这个证书&#xff0c;关于建筑八大员报名时间和考…

网络拥塞控制,对越远的流量越宽容

考虑下面的网络传输场景&#xff1a; ​ S1&#xff0c;S2&#xff0c;S3&#xff0c;S4 向 D 方向发送&#xff0c;R4 发生拥塞。R4 必须丢弃一些数据进行疏导反馈拥塞信号&#xff0c;否则谁也过不去。 优先丢掉离得最近的 S4 的数据&#xff0c;其次依次丢 S3&#xff0c;S2…

051:cesium加载mapbox的多种Style形式地图

第051个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载mapbox的多种Style形式地图,包括dark-v11,streets-v12,navigation-night-v1,outdoors-v12,satellite-v9,satellite-streets-v12,light-v10。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实…

如何让心情保持平静?100多条禅修心法

静的层次和阶段 静首先是不要去争&#xff0c;没有任何争的心&#xff0c;没有任何杂念心。静有几个层次阶段&#xff1a; ⒈. 自己的心情相对于自己平静&#xff0c;是平静的第一个阶段。 ⒉. 第二个平静的阶段是&#xff1a;别人觉得你很静&#xff0c;自己也很静&#xf…

ArduPilot开源飞控系统之简单介绍

ArduPilot开源飞控系统之简单介绍1. 源由2. 了解&阅读2.1 ArduPilot历史2.2 关于GPLv32.3 ArduPilot系统组成2.4 ArduPilot代码结构3. 后续4. 参考资料ArduPilot是一个可信赖的自动驾驶系统&#xff0c;为人们带来便利。为此&#xff0c;提供了一套全面的工具&#xff0c;几…

人人看得懂的AI教程

人人看得懂的AI教程&#xff0c;从0开始入门AI教程&#xff0c;一步一步AI&#xff0c;人工智能学习笔记 现在写书真的方便&#xff0c;闲来无事写了本从0开始学AI的书籍&#xff0c;哈哈 一、基础知识 1.1 人工智能概览 1.2 机器学习 1.3 深度学习 1.4 数据科学 二、编程知…

Stable Diffusion - API和微服务开发

Stable Diffusion 是一种尖端的开源工具&#xff0c;用于从文本生成图像。 Stable Diffusion Web UI 通过 API 和交互式 UI 打开了许多这些功能。 我们将首先介绍如何使用此 API&#xff0c;然后设置一个示例&#xff0c;将其用作隐私保护微服务以从图像中删除人物。 推荐&…

CoreDNS 性能优化

CoreDNS 作为 Kubernetes 集群的域名解析组件&#xff0c;如果性能不够可能会影响业务&#xff0c;本文介绍几种 CoreDNS 的性能优化手段。合理控制 CoreDNS 副本数考虑以下几种方式:根据集群规模预估 coredns 需要的副本数&#xff0c;直接调整 coredns deployment 的副本数:k…

总结下Spring boot异步执行逻辑的几种方式

文章目录概念实现方式Thread说明Async注解说明线程池CompletableFuture&#xff08;Future及FutureTask&#xff09;创建CompletableFuture异步执行消息队列概念 异步执行模式&#xff1a;是指语句在异步执行模式下&#xff0c;各语句执行结束的顺序与语句执行开始的顺序并不一…

【高项】项目人力资源管理,沟通管理与干系人管理(十大管理)

【高项】项目人力资源管理&#xff0c;沟通管理与干系人管理&#xff08;十大管理&#xff09; 文章目录1、人力资源管理1.1 什么是人力资源管理&#xff1f;1.2 如何进行人力资源管理&#xff1f;&#xff08;过程&#xff09;1.3 人力资源管理工具1.4 人力资源管理文件2、沟通…

自动驾驶BEV感知系列算法整理总结

序论 之前一直做的lidar感知&#xff0c;现在感觉大趋势是多传感器融合&#xff0c;所以博主也在向BEV下的融合框架学习&#xff0c;希望大家后面可以多多交流&#xff0c;下面会分为两类进行介绍&#xff0c;后期的文章会在下面两类中以小标题的形式出现&#xff0c;BEV下的两…

《推荐PlumGPT:一款优秀的聊天机器人》

PlumGPT是一款仿照ChatGPT的聊天机器人&#xff0c;它使用了最先进的自然语言处理技术来实现人机交互。PlumGPT不仅能够进行普通的对话&#xff0c;还可以回答各种问题&#xff0c;提供各种建议和信息。它能够对不同的话题做出详细的回答&#xff0c;例如科技、健康、娱乐、新闻…

[element]element-ui框架下载

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601;…

线程同步与互斥【Linux】

文章目录1. 引入2. 前导概念2.1 同步与异步2.2 互斥与并发2.3 原子性操作2.4 临界资源和临界区临界资源临界区如何管理3. 互斥锁3.1 引入3.2 概念3.3 示例pthread_mutex函数家族用法全局锁局部锁3.4 性能损耗3.5 串行执行3.6 补充4. 互斥锁的实现原理4.1 线程的执行和阻塞4.2 自…

Java虚拟机对象

对象的创建 当虚拟机遇到一条字节码new指令时&#xff0c;首先检查指令的参数能否在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化&#xff0c;如果没有就先执行类加载过程。 在类加载检查完毕后&#xff0c;就要对这个…

常见的7种软件规模估算方法 优劣势比较

业内主要的软件规模估算方法&#xff1a;LOC估算方法、故事点估算法、FPA功能点估算方法、COSMIC功能点估算方法、快速功能点估算方法、IFPUG功能点估算方法和自动化功能点估算方法。 1、LOC估算方法 LOC是源代码的总行数。通过统计源代码中的行数&#xff0c;来估算软件规模。…

Spring项目的创建和使用

Spring&#xff1a;Spring是一个包含众多工具方法的IoC容器&#xff1b; Spring的核心功能&#xff1a; 将对象&#xff08;俗称Bean&#xff09;存储到Sping容器中从容器中取出对象目录 一&#xff0c;创建Spring项目 1&#xff0c;创建一个Maven项目 2&#xff0c;添加Spri…

[STL]string的使用+模拟实现

[STL]string的使用模拟实现 文章目录[STL]string的使用模拟实现一、STL1.什么是STL2.如何学习STL二、string1.string类的介绍2.string的常用接口string的构造string的迭代器string的容量操作string的访问string的修改string的其他接口string的非成员函数接口三、string的模拟实…

Node【七】初识Express框架

文章目录&#x1f31f;前言&#x1f31f;Express框架&#x1f31f;1.什么是框架&#x1f31f;2.express安装&#x1f31f;3.创建web服务基本遵循之前的四个步骤&#xff1a;&#x1f31f;4.路由&#x1f31f; 由 &#xff1a;请求方式请求路径&#xff08;1&#xff09;get发送…

JAVA+SQL离散数学题库管理系统的设计与开发

题库、试卷建设是教学活动的重要组成部分&#xff0c;传统手工编制的试卷经常出现内容雷同、知识点不合理以及笔误、印刷错误等情况。为了实现离散数学题库管理的信息化而开发了离散数学题库管理系统。 该系统采用C/S 模式&#xff0c;前台采用JAVA&#xff08;JBuilder2006&am…