PHP echo函数返回值vs echo函数内部

时间:2010-08-30 16:41:42

标签: php

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

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

然后我希望html显示我将回显函数的返回值,如下所示:

echo alertClass('somefield')

但今天我在想为什么不把回声放在函数中而不是使用它的返回值? 因此,而不是“返回$ html”,它将是“echo $ html”...... 这种或那种方式有优势吗?

5 个答案:

答案 0 :(得分:7)

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

function yourStatus(){
   echo ' Done';
}

echo 'Status ='. yourStatus();

您的输出将如下所示

"DoneStatus ="

而不是

"Status = Done"

欢呼声

答案 1 :(得分:6)

使用echo preculdes使用该函数以编程方式构建一些HTML以便稍后输出或进行进一步处理。

如果在你的情况下返回HTML没有任何缺点,我会继续这样做。它增加了灵活性。

答案 2 :(得分:3)

这取决于功能的目的。

通常,您希望尽可能使您的功能免于副作用。如果你在几个地方回应输出,你的代码将开始变得非常混乱。返回值的函数也更通用,因为调用者可以决定是否进一步操作该值或立即回显它。

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

答案 3 :(得分:0)

如果您未在任何地方再次使用返回值,则直接echo更好。

答案 4 :(得分:0)

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

的错误
  

解析错误:语法错误,意外'回声' (T_ECHO)

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

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

echo之前加入edd_get_cart_total()不会导致货币格式化。我只是为了确定而挖掘the plugin in question's source code。相反,更有可能的是某些功能被挂钩到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' );