php switch理解

之前做项目时遇到一个问题,代码大致如下:

switch($a){
    case $a >=1000 && $a <5000:
        echo "vip1";
        break;
    case $a >=5000 && $a <=10000:
        echo "vip2";
        break;
    default:
        echo "vipx";

如果$a >0 没问题,当$a =0的时候,问题就来了,程序会输出: vip1;

后来查了下,应该是这样的:

 PHP 中switch 的功能是:选择执行某个代码块;其工作原理如下:

  1.对表达式(一般是变量)进行一次性计算;

  2.用变量的值与switch结构中 case 的值进行比较;

  3.如果变量值与case的值相等,则执行与该 case 关联的代码;

  4.代码执行完后,break 语句阻止代码跳入下一个 case 中继续执行;

  5.如果没有 与之匹配的case条件,则执行 default中的代码;

  实例代码:

也就是当$a =0的时候,第一个case先运算一次,$a >=1000 && $a <5000 当然是false;然后 0与false比较,这是就为true了,所以返回了“vip1”;

时间: 2024-10-19 12:23:31

php switch理解的相关文章

java7(1)——反编译深入理解增强的switch

[本文介绍] 本文主要讲java_7 的改进switch的底层实现.反编译一个使用带String的switch的demo并一步步解析反编译出来的字节码,从编译的角度解读switch的底层实现. [正文] 在java7中,switch()可以放进去String 类型了,这无非是一大便利.底层JVM的swtich并没有真正的改进,只是在编译阶段,编译器把关于String的switch拆分成if语句而已. 我们写一个简单的例子测试一下: (1)Test类:switch()使用String public

对于if判断和switch选择的入门理解

今天是分享一下流程控制语句中对if判断和switch选择的初步了解,让我们来看一下这两者的代码结构. if 判断: if(条件1) {代码1} else if(条件2) {代码2} else{代码n} if判断中的条件都必须为bool类型.代码可以是任意功能,任意数目.表示如果条件1成立,则执行代码1,否则判断条件2是否成立,如果成立,则执行代码2.所有条件都不成立则执行代码n.其中最后else的部分是可以省略的,表示如果以上条件都不成立,判断结束.else if可以重复任意次数. 举一个简单的

理解HTC Vive更新——控制相机旋转和位移

本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/72188658 作者:cartzhang 一.写在前面 在HTC的vive 头盔中, 一旦Vive头盔连接都unity游戏中,就会控制所有Camera的旋转和位置. 这对于有需要的控制非头盔相机带来了烦恼. 比方说,上篇博客中,在VR中,对某个特点位置截图,就会由于头盔控制所有相机的旋转, 造成截图不精确和出现偏移. 地址:

理解杀进程的实现原理(转)

基于Android 6.0的源码剖析, 分析kill进程的实现原理,以及讲讲系统调用(syscall)过程,涉及源码: /framework/base/core/java/android/os/Process.java /framework/base/core/jni/android_util_Process.cpp /system/core/libprocessgroup/processgroup.cpp /frameworks/base/core/jni/com_android_intern

深入理解Runloop,看我一篇就够了

前言 RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,为了让大家更加快速融入,请先一段代码: + (NSThread *)networkRequestThread { static NSThread *_networkRequestThread = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ _networkRequestThread = [[NSThread alloc

转:轻松理解 Android Binder,只需要读这一篇

转自http://www.jianshu.com/p/bdef9e3178c9 在 Android 系统中,Binder 起着非常重要的作用,它是整个系统 IPC 的基石.网上已经有很多文章讲述 Binder 的原理,有的讲的比较浅显,没有触及到关键,有的讲的太过于深入底层,难以理解,本文会比较全面,以一个比较轻松的方式,从面到点,大处着眼,小处着手的形式去讲述 Binder 在 Android 中是如何使用的.理解 Binder 的基本原理,对学习 Android 也有很大的帮助,很多问题也能

Linux内核设计第八周学习总结 理解进程调度时机跟踪分析进程调度与进程切换的过程

陈巧然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.视频内容 Linux系统的一般执行过程 最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程 1. 正在运行的用户态进程X 2. 发生中断——save cs:eip/esp/eflags(current) to kernel stack, then load cs:eip(entry of a specific IS

Android EventBus源码解析, 带你深入理解EventBus

上一篇带大家初步了解了EventBus的使用方式,详见:Android EventBus实战 没听过你就out了,本篇博客将解析EventBus的源码,相信能够让大家深入理解该框架的实现,也能解决很多在使用中的疑问:为什么可以这么做?为什么这么做不好呢? 1.概述 一般使用EventBus的组件类,类似下面这种方式: [java] view plain copy public class SampleComponent extends Fragment { @Override public vo

Virtual DOM 虚拟DOM的理解(转)

作者:戴嘉华 转载请注明出处并保留原文链接( #13 )和作者信息. 目录: 1 前言 2 对前端应用状态管理思考 3 Virtual DOM 算法 4 算法实现 4.1 步骤一:用JS对象模拟DOM树 4.2 步骤二:比较两棵虚拟DOM树的差异 4.3 步骤三:把差异应用到真正的DOM树上 5 结语 6 References 1 前言 本文会在教你怎么用 300~400 行代码实现一个基本的 Virtual DOM 算法,并且尝试尽量把 Virtual DOM 的算法思路阐述清楚.希望在阅读本