2012-04-25 11 views
1

簡単な質問です。関数に格納されている連絡先フォームは、必要なページで呼び出すほうが簡単だからです。str_replace:文字列を関数に置き換えてください。

使いやすさを拡張するため、str_replaceを使用して{contactform}を検索したいと思います。

例:

function contactform(){ 
    // bunch of inputs 
} 

$wysiwyg = str_replace('{contactform}', contactform(), $wysiwyg); 

したがって、基本的に、{}のContactFormが見つかった場合。 contactformの出力に置き換えてください。

私は置換前に関数を実行して、その出力を変数に格納してから、同じ変数に置き換えることができます。しかし私は、私が気づいている方法よりも良い方法があるかどうかを知ることに興味があります。

、あなたの質問に答えるために、ここでhttp://php.net/call_user_func

$wysiwyg = 'Some string and {contactform}'; 

$find = '{contactform}'; 

strpos($wysiwyg, $find) ? call_user_func($find) : ''; 
+0

ほとんどの場合、{contactform}が表示されない場合は、@ preed_replace_callbackを使用する方が良いです。それが常に存在すれば、あなたの現在のコードが最も理にかなっています。 –

答えて

1

あなたのメソッドは問題ありません。contactform()の内容を複数回使用する予定がある場合は$ varとして設定します。

str_replace関数を実行する前に{contact_form}が存在するかどうかを確認するには、http://php.net/strposを使用することがあります。

あなたは両方の方法を試すことができ、およびサーバーのサポートもあれば、ベンチマーク:

<?php echo 'Memory Usage: '. (!function_exists('memory_get_usage') ? '0' : round(memory_get_usage()/1024/1024, 2)) .'MB'; ?> 
0

、あなた PCREとpreg_replace_callbackを使用して、どちらかあなたのcontactform()機能を修正することができますまたは一致を受け入れるラッパーを作成します。

私は、関数を一度実行し、それを変数に格納するというあなたの考えはより意味をなさないと思います。

2

をPHPのcall_user_func()より多くの情報を見てしたいことのおかげ

0

はい、あります:1を自分で書きます。 (PHPがまだ確実でない場合は、私の次のポイントを参照してください。)

ああ、そこにはpreg_replace_callback()です。もちろん、3つの正規表現ライブラリのうちの1つで、単純な文字列操作は行いません。

とにかく、私の主張は:PHPの[非]設計ガイドラインに従わないでください。独自のマルチバイト文字列置換関数をコールバックで記述し、call_user_func()は使用しないでください。

関連する問題