PHP开发日志 ━━ 深入理解三元操作与一般条件语句的不同

概况

三元运算符的功能与“if…else”流程语句一致。

在一般情况下,三元操作替换if条件语句可以精简代码,并且更为直观,但是在下面的情况中使用三元操作将会返回警告。

借图:

在这里插入图片描述

案例

比如原代码:

class classA{public static function &get_instance($param='')	{...		if(isset(self::$_instance->$param)){return self::$_instance->$param;}else{return NULL;}	}
}

而一旦改写三元操作的时候:

class classA{public static function &get_instance($param='')	{...		return isset(self::$_instance->$param) ? self::$_instance->$param : NULL;}
}

系统会提示:
PHP Notice: Only variable references should be returned by reference in...

分析

为什么呢?

  • 为什么第一种写法正确?
    • 函数声明为返回引用
    • 对象属性也是引用
    • 如果$param为空,直接返回对象实例,即返回一个对象引用
    • 否则使用if分支,每个分支都返回对象属性引用NULL,都符合引用要求
  • 为什么第二种写法出错?
    • 问题在使用三元操作符
    • 三元操作符整体返回一个值,而不是引用
    • 此时虽然内容是属性,但类型上仍是个值而不是引用
    • 所以不匹配函数声明为返回引用这个要求

总结

  • 函数声明返回引用,每个返回节点都必须返回真正的变量引用
  • 第一种用if分支,每个分支都返回引用
  • 第二种三元操作符整体返回一个值,就算内容是引用也不算
  • 所以正确应该是第一种if分支写法,而不是使用三元操作符。

NULL本身不是一个变量,所以严格来说返回NULL也不算返回变量引用。
但是NULL作为一个特殊值,它可以作为非引用值正常返回,不会报错。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/682068.shtml

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

相关文章

DS:树及二叉树的相关概念

创作不易,兄弟们来波三连吧!! 一、树的概念及结构 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c…

Java并发基础:ConcurrentLinkedDeque全面解析!

内容概要 ConcurrentLinkedDeque类提供了线程安全的双端队列操作,支持高效的并发访问,因此在多线程环境下,可以放心地在队列的两端添加或移除元素,而不用担心数据的一致性问题。同时,它的内部实现采用了无锁算法&…

概率论-随机变量

更多AI技术入门知识与工具使用请看下面链接: https://student-api.iyincaishijiao.com/t/iNSVmUE8/

二叉树-------前,中,后序遍历 + 前,中,后序查找+删除节点 (java详解)

目录 提要: 创建一个简单的二叉树: 二叉树的前中后序遍历: 二叉树的前序遍历: 二叉树的中序遍历: 二叉树的后续遍历: 小结: 二叉树的前中后续查找: 二叉树的前序查找&#…

MySQL表的增删查改(基础)

新增(Create) 1.全列插入 全列单行插入 insert into 表名 values(值,值……); 也可以全列且多行插入 insert into 表名 values (值,值……),(值,值……)……; 2.指定列插入 insert into 表…

【JAVA WEB】JavaScript--函数 作用域 对象

目录 函数 语法格式 示例 定义没有参数列表,也没有返回值的一个函数 定义一个有参数列表 ,有返回值的函数 关于参数个数 函数表达式 作用域 作用域链 对象 基本概念 创建对象 1.使用 字面量 创建对象 2.使用new Object()创建对象 3.使…

【教程】MySQL数据库学习笔记(二)——数据类型(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、整…

Ps:创建联系表

Ps菜单:文件/自动/联系表 II Automate/Contact sheet II Photoshop 的“联系表 II” Contact Sheet II命令为快速生成图像集合的预览和打印目录提供了一种高效的方法。 此命令可以通过自动化过程读取指定的图像文件,然后根据用户定义的参数(如…

初识webpack(二)解析resolve、插件plugins、dev-server

目录 (一)webpack的解析(resolve) 1.resovle.alias 2.resolve.extensions 3.resolve.mainFiles (二) plugin插件 1.CleanWebpackPlugin 2.HtmlWebpackPlugin 3.DefinePlugin (三)webpack-dev-server 1.开启本地服务器 2.HMR模块热替换 3.devServer的更多配置项 (…

很在意别人的看法,怎么办?

如果把我们每天的幸福和烦恼列出来,你也许会发现一件有趣的事情: 带给我们幸福感的,往往是别人的感谢、鼓励和肯定。它们会带给你许多动力,让你一整天都充满激情。 反过来,带给我们烦恼的,大多数来源于什么…

vscode运行Live Server报错:Windows找不到文件Microsoft Edge

问题场景: 在写好的html文件空白处右键单击Open with Live Server后弹出下面提示框报错Windows找不到文件Microsoft Edge有的电脑报错是Windows找不到文件chrome 问题解决方案: 应该是由于你电脑上的默认浏览器Chrome的安装路径变了,更新C…

【Linux】进程信号概念 | 核心转储 | 信号的产生

文章目录 一、信号入门1.1 生活中的信号1.2 进程角度的信号1.3 信号的概念1.4 信号的三种常见处理方式 二、信号的产生2.1 通过终端按键产生信号问题1:OS怎么知道键盘输入了ControlC ?问题2:按CtrlC终止进程和按Ctrl\终止进程,有什…

mysql表设计

表设计流程: (1)分库:根据模块分 (2)分表:根据流程分表 (3)冗余字段和视图设计 21个表设计准则 (1)命名规范 account_no,account_number 表名用t…

【闲谈】开源软件的崛起与影响

随着信息技术的快速发展,开源软件已经成为软件开发的趋势,并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点,使得越来越多的企业和个人选择使用开源软件,促进了软件行业的繁荣。然而,在使用开源软件的过…

软考 系统分析师系列知识点之信息系统战略规划方法(10)

接前一篇文章:软考 系统分析师系列知识点之信息系统战略规划方法(9) 所属章节: 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.6 战略栅格法 战略栅格(Strategic Grid,SG)法是…

基于CU,PO,RD,IPO矩阵图分析数据资产-自创

术语 数据资产:数据资产是具有价值的数据资源。没有价值的数据资源,通过采集,整理,汇总等加工后,也可以成为具有直接或间接价值的数据资产。传统企业逐渐数字化转型,尤其是互联网企业,都十分重视…

C#中implicit和explicit

理解: 使用等号代替构造函数调用的效果以类似重载操作符的形式定义用于类型转换的函数前者类型转换时候直接写等号赋值语法,后者要额外加目标类型的强制转换stirng str -> object o -> int a 可以 int a (int)(str as object)转换通过编译,但没有转换逻辑所以运行会报错…

《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)

文章目录 3.1 区块和交易的结构3.1.1 基础知识3.1.2 重点案例:构建简单的区块链3.1.3 拓展案例 1:验证交易签名生成密钥对签名交易验证签名完整的交易签名与验证演示 3.1.4 拓展案例 2:监听和解析区块链事件代币合约示例(Solidity…

Android adb使用超级大全

Android adb使用超级大全 ADB,即Android Debug Bridge,是一款强大的工具,对于Android开发/测试人员来说是不可或缺的,同时也是Android设备玩家的好玩具。本文将详细介绍ADB的使用方法。 ADB的基本用法如下: 命令语法…

Pb协议的接口测试

Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据,此工具对标 XML ,支持自动编码,解码。比 XML 性能好,且数据易于解析。更多有关工具的介绍可参考官网。 P…