[PHP-users 25894] preg_replaceのe修飾子でオブジェクトのメソッドを使う
ITOH Takashi
itoh @ tohokuaiki.jp
2005年 6月 24日 (金) 14:02:53 JST
伊藤です。
preg_replaceのe修飾子を使いたいのですが、リプレースに
オブジェクトのメソッドを使おうとするとうまく動作しません。
下記、サンプルで説明します。
<?php
class Test_class{
var $value='default_value';
function test_method($foo){
return base64_encode($foo);
}
}
function test_function($foo){
return base64_encode($foo);
}
$test_obj = new Test_class ;
$str = 'honjitsu ha seiten hogeDESUhoge.'."\n" ;
$pattern = "/hoge(.*)hoge/e";
// 1. 関数を使った場合
$replacement = "'$1 '.test_function($1).' $1'";
echo preg_replace($pattern , $replacement , $str) ;
// 2. 静的に呼び出したクラスメソッドを使った場合
$replacement = "'$1 '.Test_class::test_method($1) . ' $1'";
echo preg_replace($pattern , $replacement , $str) ;
// 3. オブジェクトのプロパティを使った場合
$replacement = "'$1 ' . $test_obj->value . ' $1'";
echo preg_replace($pattern , $replacement , $str) ;
// 4. オブジェクトのメソッドを使った場合
$replacement = "'$1 ' . $test_obj->test_method($1) . ' $1'";
echo preg_replace($pattern , $replacement , $str) ;
?>
結果は、
honjitsu ha seiten DESU REVTVQ== DESU.
honjitsu ha seiten DESU REVTVQ== DESU.
honjitsu ha seiten DESU default_value DESU.
honjitsu ha seiten DESU DESU DESU.
となりました。
1〜3の場合は問題なく期待通りの結果が得られていますが、
4の場合にメソッドが呼び出されずに$1がそのまま表示されてしまっています。
preg_replaceのe修飾子は、オブジェクトメソッドが使えないのでしょうか?
なおサンプルを動作させた環境は、
MacOSX 10.3.9
PHP 4.3.11
Apache 1.3.33
です。
伊藤
PHP-users メーリングリストの案内