【问题标题】:PHP echo function return value vs echo inside functionPHP echo 函数返回值 vs echo inside 函数
【发布时间】:2010-08-30 16:41:42
【问题描述】:

通常,我会写一个这样的函数:

function alertClass($field,$full=false){
 global $formErrors;
 $html = $full ? ' class="alert"' : ' alert';
 if (!empty($formErrors[$field])) return $html;
}

然后我希望 html 显示在哪里,我会像这样回显函数的返回值:

echo alertClass('somefield')

但是今天我在想为什么不把 echo 放在函数中而不是使用它的返回值呢? 所以不是“return $html”而是“echo $html”...... 一种方式或另一种方式有优势吗?

【问题讨论】:

    标签: php


    【解决方案1】:

    例如,当您像这样在函数中回显文本时...

    function yourStatus(){
       echo ' Done';
    }
    
    echo 'Status ='. yourStatus();
    

    您的输出将如下所示

    "DoneStatus ="
    

    而不是

    "Status = Done"
    

    干杯

    【讨论】:

      【解决方案2】:

      这取决于函数的用途。

      一般来说,您会希望您的函数尽可能无副作用。如果您在多个地方回显输出,您的代码将开始变得非常混乱。返回值的函数也更加通用,因为调用者可以决定是进一步操作该值还是立即回显它。

      但是,如果该函数的目的是专门输出文本(例如,根据模板,负责构建和输出页面的类上的方法),那就没问题了。

      【讨论】:

        【解决方案3】:

        使用echo 可避免使用该函数以编程方式构建一些 HTML 以供以后输出或进一步处理。

        如果在您的情况下返回 HTML 没有不利之处,我会继续这样做。它增加了灵活性。

        【讨论】:

          【解决方案4】:

          如果你不再在任何地方使用返回值,那么直接echoing 更好。

          【讨论】:

          • 你能解释一下原因吗?
          【解决方案5】:

          echo 是一种 PHP 语言结构,可将值推送到输出缓冲区。它没有返回值,因此将其与字符串连接会导致 echo 之后的所有内容立即发送到输出缓冲区,echo 之前的所有内容将组成连接的字符串。这是对echo 的滥用,PHP 本身实际上并不允许这样做 - 如果您启用了 WordPress 调试,您会看到类似于

          的错误

          解析错误:语法错误,意外的“回声”(T_ECHO)

          此错误是导致您出现白屏的原因 - 当不处于调试模式时,WordPress 会抑制错误输出以避免将潜在的敏感信息暴露给最终用户。

          您不应该在简码逻辑中使用echo,因为在内部,WordPress 会使用简码的返回值进行更多处理。因此,在短代码中使用 echo 很有可能会弄乱您的最终标记。

          edd_get_cart_total() 之前包含echo 不会导致货币格式。为了确定,我已经挖掘了the plugin in question's source code。相反,更有可能将某些函数连接到 edd_get_cart_total 过滤器以格式化模板中的输出(因此当您在 header.php 模板中使用它时格式化总数),但是在短代码的上下文中,过滤器不是附上。

          插件提供了ebb_cart_total() 函数,该函数将始终生成货币格式的总字符串。函数的第一个参数是$echo,默认情况下为真,并且会导致函数显示总数而不是返回它 - 如前所述,这不是你想在短代码中做的事情 - 所以设置这个false 的参数以使函数返回一个字符串,您可以将其与其余的短代码标记连接起来。

          大家一起:

          function eddminicartfunc() {
            return 
              '<div class="mobilemenucart">
                 <i class="fa fa-shopping-cart"></i>
                 <span class="header-cart-total"> ' . edd_cart_total( false ) . ' </span>
                 <span class="header-cart edd-cart-quantity">' . edd_get_cart_quantity() . '</span>
              </div>';
          }
          add_shortcode( 'eddminicart', 'eddminicartfunc' );
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-03-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-03-13
            • 2013-06-06
            • 2014-02-27
            相关资源
            最近更新 更多