例子:请写出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网络编程学习计划

    由于网络编程是很重要的一块,自己这一块也比较欠缺,只知道一些皮毛,从今天开始系统学习<Linux网络编程>一书,全书分为十四个章节: 第一章   概论   P1-16 第二章   UNIX ...

  2. dto vo

    不过符合规矩的做法是DTO里可以放各种List<VO>,而VO和entity就是一一对应的关系,vo里不能放entity,entity里也不能放vo,vo和entity只存放和数据库完全相 ...

  3. MFC笔记3

    1. C6有默认的提示代码功能,但是其默认的快捷键是Ctrl + Space,这一般情况下是切换输入法快捷键,所以,只需重新设置一下快捷键就可以实现提示代码功能,具体设置位置如下: 工具(T) -&g ...

  4. 深度学习中Dropout原理解析

    1. Dropout简介 1.1 Dropout出现的原因 在机器学习的模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象. 在训练神经网络的时候经常会遇到过拟合的问题 ...

  5. linux文本格式转换

    问题:在linux环境下面执行SH的可执行文件. -bash: ./start.sh: /bin/sh^M: bad interpreter: No such file or directory 解决 ...

  6. LAB4

    鼠标放上去可以看文件说明,exception则在exception中处理 文件头里面穿信息,为404 out.flush();把以前的全部冲掉了,所以需要放在后面

  7. BZOJ2212或洛谷3521 [POI2011]ROT-Tree Rotations

    BZOJ原题链接 洛谷原题链接 线段树合并裸题. 因为交换子树只会对子树内部的逆序对产生影响,所以我们计算交换前的逆序对个数和交换后的个数,取\(\min\)即可. 对每个叶子节点建一棵动态开点线段树 ...

  8. nagios 报警参数

    host_notification_options: d = notify on DOWN host states, u = notify on UNREACHABLE host states r = ...

  9. c#new和override

    new是覆盖父类的虚方法,当用子类构造方法构造父类对象时调用该虚方法调的是父类的方法(视为子类屏蔽了父类的方法,没实现,还是调用父类的方法). override是重写父类的虚方法,当用子类构造方法构造 ...

  10. 移动端300ms延迟解决的几种方法;

    方案一:禁用缩放 当HTML文档头部包含如下meta标签时: <meta name="viewport" content="user-scalable=no&quo ...