2010-12-12 4 views
0

これはどこでも受け入れ可能なものですか?私は各HTMLタグのための関数が必要であり、後でHeredoc文字列で使うために定義する必要があります。これはこれまでの私のコードです。eval(PHP)を使用して一連の関数を定義する

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

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

これは、基本的にheredoc内の機能に関するHeredocの問題を処理します。簡単な例:

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

私はすべてのコードを心配しています。エラーが含まれていれば驚かないでください。私はまだ評価関数を実行していませんが、それは大丈夫です。とにかく、私の質問は次のようになります。これは大丈夫ですか、それはそれを、ハードな方法を行うに行く方が良いです:

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

などなど..?

答えて

5

PHPで提供されているcreate_functionを使用できますが、コードは単純なので、1つの関数を使用してそれらをすべて統治するのはなぜですか?

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

あなたの後に何をしてください。

考えてみると、PHP DOMがそのルートになる可能性がありますが、学習に時間がかかり、使用に慣れるまでに時間がかかることがあります。

+0

正直、私はその赤ちゃんのためにGoogleでとても大変でした!ありがとうalot :-) –

1

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

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

$html = 'create_html'; 

<<<example 
<h1>Test</h1> 
{$html('h2','Another test')} 
example; 
+0

これは、余分な引数を必要とする、いいえ、ありがとう:P –

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

機能を定義するために複数の評価往復よりも速いでしょうか。

0

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

関連する問題