1

簡単な質問です。必要なページで呼び出す方が簡単なので、関数に連絡先フォームを保存しています。

ユーザビリティを拡張するために、str_replace を使用して {contactform} を検索したいと考えています。

例:

function contactform(){
  // bunch of inputs
}

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

基本的に、{contactform} が見つかった場合。contactform の出力に置き換えます。

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

ありがとう

4

4 に答える 4

2

あなたの質問に答えるには、PCRE とpreg_replace_callback使用してから、関数を変更するか、一致を受け入れるラッパーを作成します。contactform()

ただし、関数を一度実行して変数に格納するという考えは、より理にかなっていると思います。

于 2012-04-25T08:14:51.033 に答える
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'; ?>
于 2012-04-25T08:16:44.210 に答える
0

はい、あります:自分で書いてください。(PHP で常に確認するのが難しいものがある場合を除きます。次のポイントを参照してください。)

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

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

于 2012-04-25T08:25:46.027 に答える
0

call_user_func()ここでphpの詳細情報を見たいと思うかもしれませんhttp://php.net/call_user_func

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

$find = '{contactform}'; 

strpos($wysiwyg, $find) ? call_user_func($find) : '';
于 2012-04-25T08:13:46.240 に答える