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

次の 2 つの関数を検討してください。

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()、関数自体が出力を行うため、関数の呼び出し方法 (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 アプローチを検討してください。

于 2013-03-08T18:38:41.107 に答える