0

使用 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(); ?>

....

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

4

6 回答 6

7

考虑两个函数:

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';
于 2013-03-08T18:38:38.780 回答
2

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

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

于 2013-03-08T18:48:02.743 回答
1

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

你唯一不应该做的就是使用global; 而是传递$post给函数。请参阅此答案以了解原因。

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

my_function( $post );
于 2013-03-08T18:36:38.707 回答
1

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

于 2013-03-08T18:37:38.760 回答
0

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

<?= my_function() ?>如果您想编写更少的代码,您可以使用它。

于 2013-03-08T18:37:10.087 回答
0

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

于 2013-03-08T18:38:41.107 回答