PHP echo函数返回值与函数内echo的区别

9
通常,我会编写以下类似的函数:
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" …… 两种方法之间有什么优劣吗?

5个回答

8
例如,当您从函数中输出文本时,就像这样...
function yourStatus(){
   echo ' Done';
}

echo 'Status ='. yourStatus();

您的输出将如下所示。
"DoneStatus ="

替代

"Status = Done"

干杯


6

使用echo会使得后续程序构建HTML输出或进一步处理变得困难,如果你不需要返回HTML,则可以继续使用它,这样可以增加灵活性。


3

这取决于函数的目的。

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

但是,如果函数的目的是特别输出文本(例如负责构建和输出页面模板的类的方法),那么这样做就没问题。


0

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

解析错误:语法错误,意外的'echo'(T_ECHO)

这个错误导致您的白屏 - 当不在调试模式下时,WordPress抑制错误输出以避免向最终用户公开可能敏感的信息。

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

edd_get_cart_total()之前包含echo不会导致货币格式化。我已经仔细查看了相关插件的源代码以确保这一点。相反,更可能的是某些函数被挂钩到edd_get_cart_total过滤器中,在模板中格式化输出(因此在您的header.php模板中使用时格式化总计),但在短代码的上下文中,该过滤器未附加。
方便的是,该插件提供了ebb_cart_total()函数,它将始终生成一个货币格式化的总字符串。函数的第一个参数是$echo,默认为true,将导致函数显示总数而不是返回它-正如前面详细说明的那样,在短代码中不应该这样做-因此将此参数设置为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' );

0

如果您没有在其他地方再次使用返回的值,则直接使用echo更好。


你能解释一下为什么吗? - osullic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接