php中的三元运算符使用说明

今天一个网友在群里发了个题目不难,但是可能会错


代码如下:

echo
$a == 1 ? 'one' :
$a == 2 ? 'two' :
$a == 3 ? 'three' :
$a == 4 ? 'foura' : 'other';
echo "\n";

输出结果是:

<BR>

结果是:four

一开始想不明白,按照我的理解,应该是这样的逻辑:
echo ($a == 1 ? 'one' :
( $a == 2 ? 'two' :
( $a == 3 ? 'three' :
($a == 4 ? 'four' : 'other'))));
输出为:two

后来在kevinG(qq:48474)的指教下,参看php手册,终于明白了php的三元符的解释是从左到右的,
<!--?php
// 乍看起来下面的输出是 'true'
echo (true?'true':false?'t':'f');

// 然而,上面语句的实际输出是't',因为三元运算符是从左往右计算的

// 下面是与上面等价的语句,但更清晰
echo ((true ? 'true' : 'false') ? 't' : 'f');

所以上面的可以这样解释:
echo (
((($a == 1 ? 'one' :
$a == 2) ? 'two' :
$a == 3 )? 'three' :
$a == 4 )? 'four' : 'other');

其实这个涉及到类型转换:
$a==1=>false=>$a==2?true=>'two'=true=>'three'=true=>'four'

(0)

相关推荐

  • windows下apache+php+mysql 环境配置方法

    一 准备 1 下载apache http://httpd.apache.org/download.cgi#apache24 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi openssl表示带有openssl模块,利用openssl可给Apache配置SSL安全链接 2 下载php http://windows.php.net/downloads/releases/archives/ php-5.3.5-Win32-VC6-x86.zip 下载vc6版本 VC

  • PHP 页面跳转到另一个页面的多种方法方法总结

    一.用HTTP头信息 也就是用PHP的HEADER函数.PHP里的HEADER函数的作用就是向浏览器发出由HTTP协议规定的本来应该通过WEB服务器的控制指令,例如声明返回信息的类型("Context-type: xxx/xxx"),页面的属性("No cache", "Expire")等等. 用HTTP头信息重定向到另外一个页面的方法如下: 复制代码 代码如下: <? if (isset($url)) { Header("HTT

  • php出现Cannot modify header information问题的解决方法大全

    这样的语句,很显然,造成这个原因是因为setcookie造成的,查了一下网上,有如下的解释:      cookie本身在使用上有一些限制,例如:        1.呼叫setcookie的敘述必須放在<html>标签之前        2.呼叫setcookie之前,不可使用echo        3.直到網頁被重新載入後,cookie才會在程式中出現        4.setcookie函数必須在任何資料輸出至浏览器前,就先送出        5.--        基於上面這些限制,所以

  • PHP中设置时区方法小结

    找到原因后,在网上搜索到了一些关于PHP的时区设置方法: 1.修改php.ini,在php.ini中找到data.timezone =去掉它前面的;号,然后设置data.timezone = "Asia/Shanghai";即可. 2.在程序PHP 5以上版本的程序代码中使用函数ini_set('date.timezone','Asia/Shanghai');或者date_default_timezone_set('Asia/Shanghai'); 一些常用的时区标识符说明: Asia

  • php 三元运算符实例详细介绍

    三元运算符的功能与"if....else"流程语句一致,它在一行中书写,代码精练.执行效率高.在PHP程序中恰当地使用三元运算符能够让脚本更为简洁.高效.代码的语法如下: (expr1)?(expr2):(expr3); //表达式1?表达式2:表达式3 解释:如果条件"expr1"成立,则执行语句"expr2",否则执行"expr3". <?PHP $a=10; $b=20; $c=$a>$b?($a-$b):(

  • PHP 页面编码声明方法详解(header或meta)

    php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8"); php页面为gbk编码 header("Content-type: text/html; charset=gb2312"); php页面为big5编码 header("Content-type: text/html; charset=big5"); 通常情况以

  • PHP三元运算符的结合性介绍

    先看一个三元运算式子: 复制代码 代码如下: <?php $a=1;$b=2;$c=3;$d=4; echo $a<$b?'xx':$a<$c?'yy':$a<$d?'zz':'oo'; ?> 一般按照其它语言(比如C或Java)的规则, 以上代码的运算逻辑是: 复制代码 代码如下: $a<$b => true => 'xx' ==> 结束 那么最后得到的结果就是'xx', 而再往后的运算都会被无视. 然而令人吃惊的是, php运算以上代码最后得到的结

  • php三元运算符知识汇总

    今天在改论文在线的时候遇到了一个语句看不懂: $if_summary = $row['IF_SUMMARY']==2?'是':'否'; 后来百度后发现是PHP的三元运算符 这句话的意思就等于是 if($row['IF_SUMMARY']==2){ $if_summary="是"; }else{ $if_summary="否": } 三元运算符的功能与"if...else"流程语句一致,它在一行中书写,代码非常精练.执行效率更高. 在PHP程序中恰

  • PHP date函数参数详解

    time()在PHP中是得到一个数字,这个数字表示从1970-01-01到现在共走了多少秒,很奇怪吧 不过这样方便计算, 要找出前一天的时间就是 time()-60*60*24; 要找出前一年的时间就是 time()*60*60*24*365 那么如何把这个数字换成日期格式呢,就要用到date函数了 $t=time();  echo date("Y-m-d H:i:s",$t); 第一个参数的格式分别表示: a - "am" 或是 "pm"  A

  • PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数

    一.中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $length,要截取的字数 $encoding,网页编码,如utf-8,GB2312,GBK 实例: 复制代码 代码如下: <?php $str='我们:http://www.jb51.net'; echo mb_substr($str,0,4,'utf-8');//截取头5个字,假定此代码所在php

  • 特详细的PHPMYADMIN简明安装教程

    非常适合对数据库操作命令不熟悉的数据库管理者,下面我就说下怎么安装该工具: 1.先到网上下载phpmyadmin,再解压到可以访问的web目录下(如果是虚拟空间,可以解压后通过ftp等上传到web目录下),当然您可以修改解压后该文件的名称. 2.配置config文件   打开libraries下的config.default.php文件,依次找到下面各项,按照说明配置即可: A.访问网址  引用: $cfg['PmaAbsoluteUri'] = '';这里填写phpmyadmin的访问网址 B

  • 利用phpExcel实现Excel数据的导入导出(全步骤详细解析)

    很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入正题. 首先先说一下,本人的这段例程是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错,如果有问题大家务必要对路劲是否引用正确进行测试. (一)导入Excel 第一,在前台html页面

  • php下intval()和(int)转换使用与区别

    复制代码 代码如下: <?php echo "<br/>数值强制转换:"; $string="2a"; $string1=intval($string); echo '$string1的值:'.$string1.'$string2的值:';//单引号不会输出变量,将原样输出 $string2=(int)($string); echo $string2 ?> 手册上查不到. 这也是手册上说的:引用: int intval ( mixed $va

随机推荐