【问题标题】:Is it bad practice to echo out functions in php?在 php 中回显函数是不好的做法吗?
【发布时间】:2013-03-08 18:35:34
【问题描述】:

使用 php 中的函数来回显一堆 HTML 并使其具有如下内容是不好的做法:

function my_function() {
global $post;
$custom_fields = get_post_custom();
$some_field = $custom_fields ['some_field'][0];
?>

<div class="something <?php if ($some_field) { echo $special-clas;} ?>">
<div class="something-else">
/* bunch more of html code */
</div>
</div>
}

然后在你想用它来回显它的页面中?

<html>
<body>
.....
....

<?php echo my_function(); ?>

....

我不确定回显函数有多“被接受”?

【问题讨论】:

  • echo 在那种情况下是多余的。您的函数不返回字符串,而是直接输出数据。至于“不好的做法”——本身不是,而是取决于你如何使用它。
  • IN 除了@DaveRandom 所说的......使用全局也是一种不好的做法......
  • 我同意@MartinBean 的观点,我的习惯是在最后一级回显。您总是可以在 php 中创建 html 并将其分配到可以返回和回显的变量中

标签: php


【解决方案1】:

考虑两个函数:

function does_return() {
   return 'foo';
}

function does_echo() {
   echo 'bar';
}

does_return();      // nothing displayed
echo does_return(); // 'foo' displayed

does_echo();        // 'bar' displayed
echo does_echo();   // 'bar' displayed

在这两种情况下,都可以执行输出,但发生方式不同。由于does_return() 本身在其定义中没有任何代码来执行输出,因此输出取决于调用代码,例如echo 你执行的操作。

使用does_echo(),无论您如何调用函数(有或没有回声)都无关紧要,因为函数会自行执行输出。不管怎样,你都会得到bar

现在考虑一下:

function this_is_fun();
    echo 'foo';
    return 'bar';
}

this_is_fun();       // outputs 'foo'
echo this_is_fun();  // outputs 'foobar';

【讨论】:

  • 有用的解释,但是如果你既不回显也不返回任何东西,只是编写html代码,那会被视为回显吗?
  • 你的意思是像function x() { $var = 'lots of html here'; }?除非您明确这样做,否则不会被回显或返回。
  • 我上面使用的示例函数呢?函数本身不回显或返回任何字面意思,它只是 html 代码?
  • 是的,它会输出。一旦你退出 php 模式(?&gt;),一切都被认为是“输出”。请记住:没有像 php 脚本这样的东西。只有文件中嵌入了 PHP 代码块。
【解决方案2】:

这是一种不好的做法,因为它使您的代码难以维护。

使用这样的功能,您可以混合逻辑和表示。因此,当您在输出中看到不喜欢的内容时,您无法确定先去哪里进行更改。你是去页面代码还是功能代码?

【讨论】:

    【解决方案3】:

    函数应该返回数据,然后您的应用程序按照您的意愿处理它,无论是将其分配给变量还是回显它。

    【讨论】:

      【解决方案4】:

      我看不出这是多么糟糕的做法。只要您重用该功能,那么您似乎就以正确的方式使用它。

      你唯一不应该做的就是使用global;而是将$post 传递给函数。 See this answer 为什么。

      由于您的函数已经有输出,因此您不需要echo

      my_function( $post );
      

      【讨论】:

      • 很好的评论,谢谢。我没有考虑通过 $post,有什么特别的原因为什么这比使用 global 更好吗?
      • @user1202292 见thisthis 答案。
      【解决方案5】:

      没关系。我宁愿看到 PHP 完全混合到 HTML 中。

      如果您想编写更少的代码,可以使用&lt;?= my_function() ?&gt;

      【讨论】:

      【解决方案6】:

      @DaveRandom 在他的评论中说了什么。除此之外,不,这不一定是坏习惯。虽然它可以生成难以调试的代码。考虑一种 MVC 方法,其中逻辑主要在 Controller 中,而 View 仅根据该逻辑处理呈现视图。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 2019-10-30
        相关资源
        最近更新 更多