2013-03-08 103 views
0

它是不好的做法呼应了使用PHP中的功能,并且使其像这样的HTML的一串:在PHP中回显功能是不好的做法吗?

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

.... 

我不确定如何“接受”它是回声功能?

+6

在那种情况下'echo'是多余的。你的函数不返回一个字符串,它直接输出数据。至于“不好的做法” - 不是本身,而是取决于你如何使用它。 – DaveRandom 2013-03-08 18:36:47

+0

除了@DaveRandom所说的..使用全球也是一个不好的做法... – Baba 2013-03-08 18:37:52

+0

我同意@MartinBean,这是我的做法,在最后一级回声。你总是可以在php中创建html并将其分配给一个可以返回的变量,并且echod – 2013-03-08 18:42:10

回答

6

考虑两个功能:

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'; 
+0

+1真的很好解释 – Kermit 2013-03-08 18:39:07

+0

有用的解释,但是如果你既不回应或返回任何东西,只要写html代码就会被当作回声处理? – user1202292 2013-03-08 18:45:39

+0

你的意思是像'function x(){$ var ='这里有很多html'; }'?这不会被回应,或返回,除非你明确这样做。 – 2013-03-08 19:02:49

1

我不明白这是怎么回事。只要你重用了这个函数,那么看起来你正在以正确的方式使用它。

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

由于您的功能已经有输出,您不需要echo

my_function($post); 
+0

好评,谢谢。我没有考虑过通过$ post,是否有一个特别的原因,为什么这会比使用全局更好? – user1202292 2013-03-08 18:44:29

+1

@ user1202292请参阅[this](http://stackoverflow.com/questions/2216340/the-advantage-disadvantage-between-global-variables-and-function-parameters-in)或[this](http:// stackoverflow .com/questions/5166087/php-global-in-functions)的答案。 – Kermit 2013-03-08 18:45:37

+0

谢谢:) – user1202292 2013-03-08 19:29:12

0

这很好。我宁愿看到,比PHP完全混合到HTML。

如果您想编写少一点的代码,则可以使用<?= my_function() ?>

+0

短标签可以接受吗? – Kermit 2013-03-08 18:37:42

+0

恩,是的。由于PHP 5.4,''标签始终处于启用状态,即使您使用旧设置关闭它们也是如此。 – 2013-03-08 18:39:16

+0

@AarolamaBluenk - 从5.4开始默认启用短标签,所以我认为它是100%可接受的:http://www.php.net/manual/en/ini.core.php#ini.short-open-tag – BenOfTheNorth 2013-03-08 18:39:21

1

函数应该返回数据,然后你的应用程序处理它是如何你想要的,无论是将它分配给一个变量或回显出来。

0

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

2

这是不好的做法,因为它会让你的代码很难维护。

这样的功能就是混合逻辑和表示。所以,当你在输出中看到你不喜欢的东西时,你不能确定先去哪里去改变它。你去页码或功能代码?

相关问题