2010-12-04 6 views
2

私はショートコードでWordpress用の列システムを作成する必要がありますが、これは問題ではありませんが、少ないコードで作成しようとしています。変数から名前を持つ関数を定義していますか?

私は必要なデータを持つ配列を持っています。私はそれをループし、固有の名前の関数を作成し、shortcode関数として設定します。 3番目のステップは謎です。変数から関数を作成するにはどうしたらいいですか?

はここでそれが行われるべきか、例を示します

$data[] = "first"; 
$data[] = "second"; 
foreach($data as $key => $value) { 
    function $value($atts,$content) { 
     return '<div class="'.$value.'">'.$content.'</div>'; 
    } 
    add_shortcode($value,$value); 
} 

しかし、それはPHPでそのように動作させることが可能ではないようです。すべての(同一の)関数を分けて書いて欲しくないので、この作業を行う方法はありますか?私はショートコードを[col first]text[/col]のようにすることができましたが、クライアントはそれぞれに異なる名前を付けたいと考えています。

答えて

5

あなたは変数識別子として変数の値を使用するように、二重ドルの構文を使用することができ、

例:

$variable = "test"; 
$$variable = "value of test" 

echo $test; //or echo $$variable; 

私は試したことがないが、あなたは道試してみたい:

foreach($data as $key => $value) 
{ 
    function $$value($atts,$content) 
    { 
    } 
    add_shortcode($value,$value); 
} 

またはcreate_function

のような機能あなたのPHを使用している場合そのようなP 5.3またはあなたが行うことができますより大きい何か:

$$value = function() 
{ 

} 

が動作するはず細かい

+0

PHPで '$'を使って関数のプレフィックスを作成することはまだできません。そしてlamda形式では、関数名として '$ value'を使うのではなく、PHPにユニークな名前を決めるようにしています。 – ajreal

+0

そうです、ラムダスタイルのように、 5.3 – RobertPitt

0

私はWPの機能をinvocatesかどうかはわかりませんが、それはcall_user_funcを使用している場合、あなたが使用してごまかすかもしれません仮想メソッドを持つオブジェクト:

class fake_functions { 
    function __call($name, $params) { 
     return '<div class="'.$name.'">'.$params[1].'</div>'; 
    } 
} 

$obj = new fake_functions(); 
foreach ($data as $value) { 
    add_shortcode($value, array($obj,$value)); 
} 
関連する問題