例子:请写出echo 3 . print(2) . print(4) . 5 . 'c'的输出结果为____?

许多人看到这个题的第一印象是输出结果不就是3245c嘛,然而正确的是答案却是45c2131,是不是感觉不可思议?

想要分析原因首先我们需要明确以下几点:

  • PHP中的.连接符是从左向右执行的;
  • echo和print输出都是需要占用io的;
  • print函数有返回值且始终返回1。
  • print函数在打印输出时,会清空io存储

然后我们再来分析上面的的语句的执行过程

echo 3 . print(2) . print(4) . 5 . 'c';

程序从左至右执行,

第一步:

最初在io存储处存入 字符串 c,接着遇到5,存入io,此时io内容为5c, echo 在碰到print()时候将执行print(),即在把 5 放入io存储后由print(4)将数字4也同样压入io存储中,此时io存储中数据为45c,由于print()为输出函数(官方介绍print实际是语言结构,不是函数),所以此时会执行一次io输出操作,即输出 45c 到输出界面,清除io存储,io存储内此时数据为'',print()执行完成后返回1,此时界面上已经有了45c,而代码则变成了

echo 3.print(2).1;

第二步:

同上以此类推,这次会先将1放入io内,接着讲2放入io内,此时io内的内容为21,print执行输出操作,清空io,此时屏幕相等于已经输了了45c21,代码则变为了

echo 3.1;

第三步:

将1和3放入io,此时io内容为31,echo 将io内容输出到屏幕,此时最终结果为45c2131

同类例题:

echo 3 . print(2) . print(4) . 5 . 'c' . print(6) . print(7) . 'b' . print(8) . 'a';的结果是什么呢?

结果是:8a7b16145c12131

有兴趣的可以看看自己的推算出的结果是否是正确的。

参考:https://blog.csdn.net/inite/article/details/74130350

为什么 echo 3 . print(2) . print(4) . 5 . 'c'的结果是45c2131的更多相关文章

  1. 2018/03/16 echo、print_r、print、var_dump之间的区别

    还是先说下我对这个方法的理解 print_r()用于 cli模式下的输出调试,error_log() 调试 var_dump() 用于页面的显示调试 echo() 用处比较多,__toString() ...

  2. Echo()、print()、print_r()区别

    echo可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用.echo是php的内部指令,不是函数, ...

  3. GridView Print and Print Preview

    sing System.Linq; using System.Printing; using System.Windows; using System.Windows.Controls; using ...

  4. php中echo(),print(),print_r(),var_dump()间的区别

    echo()函数:输出一个或多个字符串.实际上它并不是一个函数,所以不必对它使用括号,直接用echo就行.然而,如果您希望向echo()传递一个以上的参数,使用括号将会生成解析错误.echo()函数比 ...

  5. echo print() print_r() var_dump()的区别

    常用调试方法 echo()可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用. print()函数 ...

  6. 7.echo(),print(),print_r()的区别

    echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print()    只能打印出简单类型变量的值(如int,string) print_r() ...

  7. php中echo(),print(),print_r()之间的区别

    echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)  print只能打印出简单类型变量的值(如int,string)  print_r可以打印出复 ...

  8. PHP之echo/print

    1.PHP中有两个基本的输出方式:echo和print: 2.echo和print的区别: **echo:可以输出一个或多个字符串: **print:只允许输出一个字符串,返回值总为1: 3.echo ...

  9. 5.echo(),print(),print_r()的区别

    echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print()    只能打印出简单类型变量的值(如int,string) print_r() ...

随机推荐

  1. Linux网络编程学习(二) ----- 进程控制(第三章)

    1.进程和程序 程序是一个可执行文件,而一个进程是一个执行中的程序实例.一个进程对应于一个程序的执行,进程是动态的,程序是静态的,多个进程可以并发执行同一个程序.比如几个用户可以同时运行一个编辑程序, ...

  2. Python3 复制和深浅copy

    赋值: 列表的赋值: list1 = ['peter','sam'] list2 = list1 print(list1,id(list1)) print(list2,id(list2)) list1 ...

  3. ceph常用运维技巧总结1

    格式 json 数据增强可读性 --format json-pretty -f json-pretty ceph quorum_status -f json-pretty ceph mon_statu ...

  4. 合并数组,改变原数组apply与不改变原数组

    一看见合并数组,可能第一反应就是concat,concat确实具有我们想要的行为,但它实际上并不附加到现有数组,而是创建并返回一个新数组. 同样你也许会想到ES6的扩展运算符...         但 ...

  5. jeesite 下载ckfinder上传的文件

    在需要下载的位置,将以下代码复制到页面最下方,就可以实现文件下载了 <script> $(document).ready(function() { var fileName = $(&qu ...

  6. azkaban 配置邮件

    1.配置邮件请在azkaban-web-server中进行配置:如下图:      /opt/azkaban/azkaban/azkaban-web-server/build/install/azka ...

  7. spring多线程

    Spring4.x高级话题(二):多线程 一. 点睛 Spring通过任务执行器(TaskExecutor)来实现多线程和并发编程.使用ThreadPoolTaskExecutor可实现一个基于线程池 ...

  8. Less入门及知识点整理

    LESS « 一种动态样式语言 文档链接:http://www.bootcss.com/p/lesscss/ 百科 Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合( ...

  9. 【转载】Sql Server参数化查询之where in和like实现详解

    文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where ...

  10. 2019年Python数据挖掘就业前景前瞻

    Python语言的崛起让大家对web.爬虫.数据分析.数据挖掘等十分感兴趣.数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是数据挖掘.所谓数据挖掘就是指从数据库的大量数据中揭示出隐含的 ...