2013-03-08 102 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

這是不好的做法,因爲它會讓你的代碼很難維護。

這樣的功能就是混合邏輯和表示。所以,當你在輸出中看到你不喜歡的東西時,你不能確定先去哪裏去改變它。你去頁碼或功能代碼?

相關問題