【问题标题】:Return and echo返回和回声
【发布时间】:2015-02-16 01:07:49
【问题描述】:

如果我在 PHP 函数中返回之前回显某些内容会发生什么?一个例子如下:

protected function getStockFromGarp($data) {
    echo $data." stock returned from call ".$url;            
    return $data; // Returning $data for future date
}

public function updateStock($sku) {
    $entry->this = getStockFromGarp($sku);
}

调用 updateStock($var) 时,$entry->this 的值是什么?

【问题讨论】:

  • 是的,可能只是想寻求提示而不是工作。
  • 我缩短了代码,假设它是这个示例的简单变量。
  • 恕我直言,将数据存储在名为 this 的对象变量中是个坏主意。
  • 你跳过了很多东西。首先,您知道$url$entry 超出范围,对吧?
  • 我缩短了这个问题和这个例子的代码。假设其他一切都是正确的,并且变量在范围内。

标签: php return echo


【解决方案1】:

结果($entry->this)与没有回显的结果相同。

【讨论】:

  • 你的意思是在我的例子中 $data 的值将被分配给 $entry->this var 并且字符串 im echoing 什么都不做?
  • 回显后的字符串将被回显=发送到浏览器(如果没有激活输出缓冲)。仅此而已。
【解决方案2】:

Echo 输出数据,不返回数据。使用 echo 不会跳过 return 子句。它本身也不编辑数据,因此您的 $data 变量不会被更改,并且会返回与用作参数时完全相同的结果。

【讨论】:

    【解决方案3】:

    PHP 将首先执行回显,然后返回 $data。 Echo 输出数据但不会阻止 PHP 重新解析。

    也许这样会更清楚:

    class Conversation
    {
        public $knowledge = array();
    
        public function say($string)
        {
            // echo $string;
            return $string;
        }
    
        public function listen($string)
        {
            $this->knowledge[] = $string;
        }
    }
    
    $me = new Conversation();
    $johnDoe = new Conversation();
    
    $johnDoe->listen($me->say("I've got a secret"));
    $me->listen($johnDoe->say("Tell me!"));
    

    如果你使用回声,我会说我有一个秘密,但 John Doe 永远听不到我的声音。

    【讨论】:

    • 您的意思是我的示例中 $data 的值将被分配给 $entry->this var,而 im echoing 的字符串对 $entry->this 没有任何作用?
    • 你的回显会被输出到浏览器或控制台,然后$data会被分配给$entry->this,所以回显确实不会对$entry->this做任何事情