使用速记回声时,如何在函数中使用双重回声?

时间:2014-08-29 15:34:53

标签: php

为什么会这样(启用严格模式):

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

并且没有:

<?= echo 'hello world'; ?>

2 个答案:

答案 0 :(得分:3)

鉴于

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

然后这些都产生完全相同的输出,单词&#39; foo&#39;:

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

无论&#34;论点&#34;在代码<?= ... ?>内部,它得到输出。如果是函数调用,则执行该函数,其返回值为输出。如果它只是一个值(变量,固定字符串/整数),则输出该值。

echo是语言构造,在某些情况下可以像函数调用一样对待,但 NOT 有返回值。所以

<?= echo $foo ?>

通过echo命令回显$foo的值,但由于echo本身没有返回值,因此不会回应任何其他内容。

现在,如果它是

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

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

然后你明白了:

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

作为输出。

答案 1 :(得分:2)

因为它调用函数然后输出函数的返回值。由于返回值为空,因此内部的回声被调用,然后“没有”。 (NULL)被打印出来。