2011-06-02 5 views
0

私は次のコードを持っている:私は、同じクラス内の関数get_bitly_url()の戻り値との一致を交換したいと思いますにpreg_replace

$message = preg_replace($pattern, "$this->get_bitly_url('$0')", $message); 

function get_bitly_url($url) { 
    // do stuff to get the url 

    return $newurl; 
} 

を。

しかし、私は次のエラーを得た:これは動作します

$message = preg_replace($pattern, "self::get_bitly_url('$0')", $message); 

が、私は、これはそれを行うための正しい方法であるかどうかを知りたい:

Notice: Undefined property: MyClass::$get_bitly_url in /path/to/MyClass.php on line 43 

は、だから私は、とにpreg_replaceように変更。

だからそれは?

答えて

1

使用単一引用符は、そうでない場合はPHPは早すぎる$this->を評価しようとします:あなたがここにpreg_replaceから表現を含む文字列を渡す必要があり

$message = preg_replace($pattern, '$this->get_bitly_url("$0")', 

。しかし、二重引用符で囲まれていると、として文字列式の前には、の前に関数パラメータになります。

1

あなたはPHP5.3以上を使用していると仮定すると、あなたはこれを使用することができます。

以前のバージョンで
$myObject = $this; 
$message = preg_replace_callback($pattern, function($matches) use($myObject) { 
    return $myObject->get_bitly_url($matches[0]); 
}, $message); 

は、あなたがどこか他の関数を定義することができますし、preg_replace_callbackする文字列として関数名を渡しますが、この遅いです。