2013-04-29 130 views
0

假设下面的代码:回声和打印声明

<?php 
echo 'hello' . print 123; 

执行。

我期望的是hello123,但实际输出是123hello1

为什么123最先?为什么输出包含1

(我也试图把一对括号周围hello,但还是同样的结果。)

+2

对不起。我不是要求解决这个问题。我想要的是解释。谢谢你的帮助 – sc1013 2013-04-29 13:44:25

回答

11
echo 'hello' . print 123; 

这样可以将'hello'返回值的print 123。在print返回的值1,它输出123。级联的hello1输出之后由echo。因此,评价是:

  1. 输出123
  2. 回报1
  3. 串连'hello'1
  4. 输出hello1
2

Documentation清楚地说,print函数将返回始终为1。

所以在这里如何去。

执行打印功能 - >输出123 - >返回1 - > concat与hello

0

为什么123最先?
可能是因为print语句首先被执行并且应该打印'123'。

为什么输出结尾包含1?
由于“打印”返回1,你的回声声明回声的那个“1”

1

print的返回值始终是。

你的代码中有一个级联点字符:

'hello' . print 123; 

因此所有零件都连接前评估:

  • '你好' 是 '你好'
  • 打印123:它显示“123 '在屏幕上,并返回1

然后echo会显示评估字符串:

echo 'hello'.'1' // '1' is the return value of print 

打印在字符串上的最后一个字符串是123hello1