在php函数中使用echo和return时发生了什么?

在php函数中使用echo和return时发生了什么?,php,function,return-value,Php,Function,Return Value,我创建了一个函数并在其上回显一个字符串。之后,我将使用这个函数连接一个字符串。为什么这个函数值出现在连接字符串之前 function my_function(){ echo " Second Text"; } echo " First Text, ".my_function(); 输出:第二个文本第一个文本, 我的预期输出是第一个文本,第二个文本 另一方面,当我在echo的函数替代项中使用return时。我得到了我的预期输出 function my_function(){ r

我创建了一个函数并在其上回显一个字符串。之后,我将使用这个函数连接一个字符串。为什么这个函数值出现在连接字符串之前

function my_function(){
    echo " Second Text";
}

echo " First Text, ".my_function();
输出:
第二个文本第一个文本,

我的预期输出是
第一个文本,第二个文本

另一方面,当我在
echo
的函数替代项中使用
return
时。我得到了我的预期输出

function my_function(){
    return " Second Text";
}
echo " First Text, ".my_function();
输出:
第一个文本,第二个文本

为什么我无法通过函数中的
echo
获得预期输出?

在这种情况下:

function my_function () {
    echo " Second Text";
}

echo " First Text, " . my_function();
内部发生的情况类似于:

echo " First Text, " . echo " Second Text";
从的抓取:


在函数外部的
echo
之前,PHP尝试将文本与函数的返回连接起来,但是函数
echo
s并返回
NULL
,然后执行echo。同样的情况也发生在
var\u dump()

你有两个选择:

  • 如您所述,使用
    返回
  • 用逗号表示。见下文
  • 以下代码将为您提供预期的输出:

    function my_function () {
        echo " Second Text";
    }
    
    echo " First Text, ", my_function();
    

    我已经检查了所有的代码,它的工作如预期

    进行初始回波时,使用concat

    function my_function(){
        echo " Second Text";
    }
    
    echo " First Text, ".my_function();
    
    PHP必须首先处理函数,因为是串联的,换句话说,它需要从函数返回,然后才能完成echo命令。因此,假设它执行
    my_函数
    ,然后最终执行echo。这会导致首先回显函数内容,然后再回显外部内容

    将逗号与echo放在一起就像放了另一个参数,只是echo不是一个函数,而是一个语言构造,因此您可以这样想(但不是这样做)
    echo(“第一个文本,”,my_function())
    ,在这种情况下,echo只单独输出每个部分。当您使用
    时,它首先生成字符串(如果不先调用函数,它就无法生成字符串),然后输出整个构造

    所以这些应该是你想要做什么的选择

    //Option 1
    function my_function(){
        return " Second Text";
    }
    
    echo " First Text, ".my_function();
    
    //Option 2
    function my_function(){
        echo " Second Text";
    }
    
    echo " First Text, ";
    my_function();
    
    //Option 3
    
    function my_function(){
        echo " Second Text";
    }
    
    echo " First Text, ",my_function();
    
    就我个人而言,我会选择第一个,因为它是最灵活的(在国际海事组织看来也是最好的)。比如说

    //Option 1
    echo " First Text, ".my_function()." Third Text";
    
    //Option 2 
    echo " First Text, ";
    my_function();
    echo " Third Text";
    
    //Option 3
    echo " First Text, ",my_function()," Third Text";
    
    对我来说,逗号的确是一个奇怪的选择,虽然它可能会起作用,但当我在代码中看到它时,它看起来很奇怪,因为它在echo中有一种特殊的用途。我也尽量不直接从函数中回音,但我通常只做OOP(面向对象编程),所以对我来说,这主要是一个范围问题


    希望能有所帮助。

    我找不到
    输出
    之间的区别,我的预期输出是
    ,在
    echo
    函数外部,PHP尝试将文本与函数的返回连接起来,但函数
    echo
    s并返回
    NULL
    ,然后执行
    echo
    。第一种情况下的输出是否正确?对于第一个输出,您声明输出与您的预期相同,并询问您为什么没有获得预期输出。这是我的写作错误。我做correction@TanmoyBiswas我已经回答了。我明白了。你对内部材料的解释是错误的。它没有解释为什么输出是“第二个文本第一个文本”,或者为什么PHP从右到左求值。但当我在本地主机上运行此代码时。它与我以前的输出相同。我使用PHP7和xampp@TanmoyBiswas请尝试清除缓存,并确保它已正确保存,就像您正在编辑正确的文件和内容一样。@Praveen Kumar我已正确清除浏览器缓存。但结果仍然是一样的