1

現在、php でフレームワークを再プログラミングしており、開発サーバーを php 5.5.3 にアップグレードしました。Web ブラウザーを起動すると、次のエラーが返されます。

[19-Oct-2013 16:54:05 Europe/Amsterdam] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /Applications/MAMP/htdocs/fw/lib/lang.php on line 57

57 行目は次のとおりです。

$response = preg_replace('/\{'.$find.'(:(.*))?\}/Ue', 'str_replace("{value}", "\\2", $replace)', $response);

私はこれらの php ドキュメントを読むのが本当にpreg_replace()苦手preg_replace_callback()です。同僚は、それは $value[1] のようなものでなければならないと私に言いましたが、それはうまくいきませんでした。

簡単な解決策はありますか、私は何かを見落としていますか?

4

1 に答える 1

3

ここに修飾子に関するページがあり、非推奨になった理由とその正確な意味について詳しく説明しています。

基本的な理由は、モディファイヤによって文字列が呼び出された/eかのように PHP コードとして評価されるためです。eval代わりに使用すると、実際のPHP 関数preg_replace_callbackを渡すことができます。

string-code (2 番目のパラメーター) を無名関数に置き換えると、コードは次のようになります。

$response = preg_replace_callback(
    '/\{'.$find.'(:(.*))?\}/U', 
    function($m) use ($replace) {
      return str_replace($m, "\\2", $replace);
    } , 
    $response);

このキーワードuseは、匿名関数が$replace呼び出しスコープで定義されるべき変数を使用できることを確認します。このディスカッションを参照してください。

于 2013-10-19T15:07:03.743 に答える