0

これは許容できるものの近くにありますか?HTMLタグごとに関数が必要であり、後でヒアドキュメント文字列で使用できるように定義する必要があります。これはこれまでの私のコードです。

<?php
$tags = array (h1, h2, h3, b, i);

foreach ($tags as $key => $value)
{
    eval ('function '.$value.' ($str) { return "<'.$value.'>$str</'.$value.'>"; }');
}

これは基本的に、ヒアドキュメント内の関数に関するヒアドキュメントの問題を処理します。簡単な例:

<<<example
<h1>This is ordinary HTML</h1>
{$h1('This is HTML via. PHP')}
example;

私はすべてのコードを心からやり直したので、エラーが含まれていても驚かないでください。eval-functionはまだ実行していませんが、問題ないようです。とにかく、私の質問は次のようになります:これは大丈夫ですか、それとも難しい方法でそれを行う方が良いですか?

function h1 ($str) { return ...; }
function h2 ($str) { return ...; }
function h3 ($str) { return ...; }
function b ($str) { return ...; }
function i ($str) { return ...; }

等々 ..?

4

4 に答える 4

5

PHPが提供するcreate_functionを使用することもできますが、コードは単純なので、1つの関数を使用してすべてをルール化しないのはなぜですか?

function createTag($tag, $text) {
     return "<{$tag}>{$text}</{$tag}>";
}

あなたが求めていることをする必要があります。

後から考えてみると、PHP DOMをチェックすることをお勧めします。これはおそらく進むべき道ですが、習得して使用に慣れるまでには少し時間がかかります。

于 2010-12-12T19:41:50.990 に答える
2

あなたがより精巧な生活を送ることができれば:

 <h1>This is ordinary HTML</h1>     
 {$h->h1("This is HTML via PHP.")}

次に、単一を定義するだけで十分です。

class html {
    function __call($name, $args) {
        return "<$name>$args[0]</$name>";
    }
}
$h = new html();

関数を定義するための複数の評価ラウンドトリップよりも高速になります。

于 2010-12-12T19:46:53.190 に答える
1

とにかく醜いハックを使用するつもりなら、私はむしろそうします:

function create_html($tag, $val) {
    return "<{$tag}>{$val}</{$tag}>";
}

$html = 'create_html';

<<<example
<h1>Test</h1>
{$html('h2','Another test')}
example;
于 2010-12-12T19:46:12.993 に答える
0

PHP 5.3を使用している場合は、クロージャを使用できます。よりはるかに優れていcreate_functionます。避けてくださいeval()

于 2010-12-12T20:44:09.143 に答える