【问题标题】:What is happning when I use echo and return in my php function?当我在我的 php 函数中使用 echo 和 return 时会发生什么?
【发布时间】:2018-02-15 19:19:35
【问题描述】:

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

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

echo " First Text, ".my_function();

输出: Second Text First Text,

我的预期输出是First Text, Second Text

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

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

输出: First Text, Second Text

为什么我在函数中没有得到 echo 的预期输出?

【问题讨论】:

  • 我找不到OutputMy expected output was之间的区别
  • 在函数外的echo之前,PHP尝试将文本与函数的返回连接起来,但是函数echos并返回NULL,然后echo执行。
  • 第一种情况下的输出是否正确?对于第一个输出,您声明输出与您的预期相同,并询问为什么您没有得到预期的输出。
  • 这是我的写作错误。我改正
  • @TanmoyBiswas 已回答。我明白了。

标签: php function return-value


【解决方案1】:

在这种情况下:

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

echo " First Text, " . my_function();

内部发生的事情是这样的:

echo " First Text, " . echo " Second Text";

AbraCadavercomment抓取:

在函数外的echo 之前,PHP 尝试将文本与函数的返回连接起来,但函数echos 并返回NULL,然后回显执行。 var_dump() 也会发生同样的事情。

你有两个选择:

  1. 如您所述,请使用return
  2. 使用逗号。见下文。

下面的代码会给你预期的输出:

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

echo " First Text, ", my_function();

我已经用PHP Tester 检查了所有代码,它按预期工作。

【讨论】:

  • 您对内部内容的解释已关闭。它没有解释为什么输出是“第二个文本第一个文本”,或者为什么 PHP 从右到左计算。
  • 是的,这段代码在 PHP Tester 中运行良好,我的预期输出在那里。但是当我在本地主机上运行此代码时。这与我之前的输出相同。我使用 PHP 7 和 xampp
  • @TanmoyBiswas 尝试清除缓存,并确保它已正确保存,就像您正在编辑正确的文件和内容一样。
  • @Praveen Kumar 我已正确清除浏览器缓存。但结果还是一样
【解决方案2】:

在做初始回显时,使用 concat

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

echo " First Text, ".my_function();

PHP 必须首先处理函数,因为连接,也就是说它需要从函数返回才能完成 echo 命令。所以假设它执行my_function 然后最终执行回显。这导致函数内容首先被回显,然后是外部回显。

将逗号与 echo 放在一起就像放置另一个参数,除了 echo 不是一个函数而是一个语言结构,所以你可以这样想(但不要这样)echo(" First Text, ",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();

我个人会选择第一个,因为它最灵活(并且看起来是最好的 IMO)。例如

//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(面向对象编程),所以对我来说,这主要是范围问题。

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2011-06-19
    • 2011-03-22
    • 2011-11-07
    • 2012-06-06
    • 1970-01-01
    • 2016-11-11
    • 2022-12-13
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多