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

php运算符的短路特性

php运算符的短路特性

1、逻辑运算符:逻辑与(&&)和逻辑或(||),存在着短路特性

PHP中有以下两个运算符具有短路的特性,他们是逻辑运算符的逻辑与(&&)和逻辑或(||),存在着短路这一特性。

逻辑或,一真为真,假假为假(一真返回,全假跳过不返回)

$a = 1;
$flag = ($a == 1 || $c = 100); echo '$c的值:'.$c.' $flag的值:'.$flag;
//输出 $c的值: $flag的值:1(true隐式转换为字符串1)

逻辑或的运算结果是运算符(||)的两边 只要有一个为真,结果就返回“真”后就不再执行其它表达式 ,所以在这个语句里已经判断到 a 的返回值是“真”,就不再执行给 a的返回值是“真”,就不再执行给 a的返回值是,就不再执行给c赋值,这样就形成了一个短路现象,所以后面的输出语句不输出内容。

逻辑与,真真为真,一假为假(全真返回,一假跳过不返回)

$a = 1;
$a == 2 && $c=100; echo '$c的值:'.$c.' $flag的值:'.$flag;
//输出 $c的值: $flag的值:(flase隐式转换为空字符串)

逻辑与的运算符(&&),逻辑与的运算方式是运算符的 两边表达式都为“真”才会继续执行其他语句而直接返回一个“假”值,所以这条语句也将不执行$c的赋值。

2、按位运算符:按位与(&)和按位或(|),不存在短路特性

按位运算符:按位与(&)和按位或(|),这两个运算符不存在短路特性,虽然它们的运算方式和逻辑与及逻辑或的运算方式相似,但他们没有存在短路现象,因为 按位与它是参加运算的表达式的同位运算都为1时才返回1否则返回0,按位或是同位运算不相同时返回1否则返回0。

按位或,同位运算不相同时返回1否则返回0(按位的“位”是二进制)

$a = 1;
$flag1 = ($a == 1 | $c = 100); // 1 | 110 0100 = 110 0101echo '$c的值:'.$c.' $flag1的值:'.$flag1.' $flag2的值:'.$flag2;
//输出 $c的值:100 $flag1的值:101 $flag2的值:100

按位与,同位运算都为1时才返回1否则返回0(按位的“位”是二进制)

$a = 1;
$flag1 = ($a == 1 & $c = 100); // 1 & 110 0100 = 0
$flag2 = ($a == 2 & $c = 100); // 0 & 110 0100 = 0
$flag3 = (1 & 1); // 1 & 1 = 1
$flag4 = (12 & 12); // 110 0110 & 110 0110 = 110 0110
$flag5 = (12 & 13); // 110 0110 & 110 0111 = 110 0110
$flag6 = (13 & 12); // 110 0111 & 110 0110 = 110 0110echo '$c的值:'.$c.' $flag1的值:'.$flag1.' $flag2的值:'.$flag2.' $flag3的值:'.$flag3.' $flag4的值:'.$flag4.' $flag5的值:'.$flag5.' $flag6的值:'.$flag6;
//输出 $c的值:100 $flag1的值:0 $flag2的值:0 $flag3的值:1 $flag4的值:12 $flag5的值:12 $flag6的值:12

3、短路特性在判断语句中的应用

由于有了运算符的短路特性,我们可以 利用这一特性来编写一些判断语句,这样可以增加了程序的灵活性 ,例如我们可以使用在 打开一个文件时进行判断

$file = fopen('a.txt','r') or die('文件不存在。');  

通过这样设置了逻辑或运算符短路,这样就可以完成判断一个文件是否存在。die()命令是结束整个文件的执行,如果 程序运行到有die()时就结束了程序的运行 ,不再去执行该页面里的其他代码,输出错误提示。

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

相关文章:

  • C语言假期作业 DAY 13
  • 以产品经理的角度去讲解原型图---会议OA项目
  • C++ 外部变量和外部函数
  • C# Onnx Paddle模型 OCR识别服务
  • MCUXpresso for VS Code -- 基于VSCode开发RT1176
  • MySQL的使用——【初识MySQL】第二节
  • MySQL最终弹-并发(脏读,不可重复读,幻读及区别),JDBC的使用和安装,最全万字
  • ⌈C++⌋从无到有了解并掌握C++面向对象三大特性——封装、继承、多态
  • Element的el-select下拉框多选添加全选功能
  • python调用pytorch的clip模型时报错
  • MySQL 数据库 binLog 日志的使用
  • Apache Storm入门介绍之三分钟看懂Apache Storm
  • RF手机天线仿真介绍(三):调谐开关分析
  • Ubuntu20.04 + QT5.14.2 + VTK8.2.0 + PCL 1.10 环境配置
  • GPT Prompt编写的艺术:如何提高AI模型的表现力
  • Ubuntu18.04 安装opencv 4.8.0教程(亲测可用)
  • 【腾讯云Cloud Studio实战训练营】React 快速构建点餐页面
  • 自监督去噪:Noise2Self原理分析及实现 (Pytorch)
  • docker容器学习笔记1
  • 线程魔法:用Spring Boot的@Async注解开启异步世界
  • 面试热题(接雨水问题)
  • Meta AI研究团队新AI模型: Llama 2 大语言模型
  • CSS水平垂直居中
  • Yolov8-pose关键点检测:模型部署篇 | yolov8-pose.onnx python推理
  • Linux中提示No such file or directory解决方法
  • Sklearn-使用SVC对iris数据集进行分类
  • 项目经理必读:领导风格对项目成功的关键影响
  • 行业追踪,2023-08-04
  • 双链表(带哨兵位头节点)
  • MySQL - LOAD DATA LOCAL INFILE将数据导入表中和 INTO OUTFILE (速度快)