2014-08-29 71 views
0

如何走到这一步的工作(启用严格模式):使用速记回声时,函数中的双重回声如何工作?

<? function test() { echo 'hello world'; } ?> 
<?= test(); ?> 

,这并不:

<?= echo 'hello world'; ?> 
+0

'' – danronmoon 2014-08-29 15:37:14

+1

echo实际上并不是一个函数(它是一种语言结构)。回声(与其他一些语言结构不同)不像函数那样工作,所以它不能总是用在函数的上下文中。 – 2014-08-29 15:38:16

+0

'PHP解析错误:?语法错误,意想不到的 '回响'(T_ECHO)''上<=回波 '富'; ?>。这不是全说吗? – hek2mgl 2014-08-29 15:43:22

回答

3

鉴于

<?php 
$foo = 'foo'; 
?> 

然后,这些都产生完全相同的输出,字 '富':

<?= $foo ?> 
<?= 'foo' ?> 
foo 
<?php echo $foo ?> 

不管是什么 “说法” 的代码<?= ... ?>在里面,它就会输出。如果它是一个函数调用,该函数将被执行并且其返回值是输出。如果它只是一个值(变量,固定字符串/整数),则输出该值。

echo是语言结构,在某些情况下可以像函数调用一样处理,但它确实有不是有返回值。所以

<?= echo $foo ?> 

呼应了通过echo命令$foo的价值,但随后呼应没有别的,因为echo本身没有返回值。现在

,如果它是

function myecho($foo) { 
    echo $foo; 
    return $foo; 
} 

<?= myecho('foo'); ?> 

然后你得到这样的:

foofoo 
^^^---echo inside the function 
    ^^^---- <?= implicit echo 

作为输出。 ?

2

因为它调用的函数,然后输出函数的返回值。由于返回值没有任何意义,因此会调用内部的回显,然后打印出'Nothing'(NULL)。

+0

我不认为这在技术上是正确的,回声不返回它的输出。 – beiller 2014-08-29 15:36:54

+0

它不回应那返回的东西。如果OP执行'var_dump(test())',结果将会是echo,然后'NULL'将被抛弃(因为被调用的函数不会返回任何东西)。有效的短标签调用'echo NULL;' – 2014-08-29 15:37:54

+0

对不起,我误解了这个问题。你是对的,因为echo返回null :) – beiller 2014-08-29 15:39:26