伊藤です。
komuraさんありがとうございます。
> 以下のようにすれば動作しませんでしょうか?
>> $replacement = "'1ドル ' . \$test_obj->test_method('1ドル') . ' 1ドル'";
> echo preg_replace($pattern , $replacement , $str) ;
確かに動作いたしました。
また、セキュリティ面からいただいたアドバイスもですが、preg_replaceで
evalされるときに、どういった手順を踏んでPHPがevalしているのかを
PHP-usersの宇野さんの投稿
http://ns1.php.gr.jp/pipermail/php-users/2004-February/020991.html
や、オンラインマニュアルの突っ込み欄から、
http://jp2.php.net/manual/ja/function.preg-replace.php#39713
http://jp2.php.net/manual/ja/function.preg-replace.php#47735
http://jp2.php.net/manual/ja/function.preg-replace.php#52369
を参考にして考え、
1.evalに渡す文字列にaddslashesを行う
2.その文字列に対して、1ドル 2ドル..を埋め込む
3.evalする
という手順だと思いますが、これだと逆になんで
// 3. オブジェクトのプロパティを使った場合
> $replacement = "'1ドル ' . $test_obj->value . ' 1ドル'";
を
// 3. オブジェクトのプロパティを使った場合
> $replacement = "'1ドル ' . \$test_obj->value . ' 1ドル'";
としてみたところ、同じ結果になるのかが不思議です。
私の期待では前者は
default_value
で、後者は
\default_value
というようになると思ったのですが。
伊藤