BBfriendブログ

WARNING: preg_replace_callback(): Requires argument 2, '*****', to be a valid callback

 

WARNING: preg_replace_callback(): Requires argument 2, '*****', to be a valid callback

との表示が出たので、覚書

警告:preg_replace_callback():引数2( '*****')が有効なコールバックになる必要があります。

 

プラグラムは

class *** {
 ・・・・
 	public function ~~~($string) {
              ・・・・
		$string = preg_replace_callback('/&([A-Za-z]{2,8}[0-9]{0,2});/',
                                 'aaa',
                                 $string);
              ・・・・
 	}
 ・・・・
 	private function aaa($string) {
              ・・・・

Class定義内の aaaを直接呼び出してる。このaaaが有効でないって事。
通常、class内部から、Class内部の関数を呼び出すなら $this -> とかを使うので、そこら辺が悪いのだろう。

下記の用に修正

array($this, 'argument2') を使う

 /*  array($this, 'argument2') */
$string = preg_replace_callback('/&([A-Za-z]{2,8}[0-9]{0,2});/',
                   array($this,'aaa'),
                   $string);

これでも動くらしい

 /*  array($this, 'argument2') */
$string = preg_replace_callback('/&([A-Za-z]{2,8}[0-9]{0,2});/',
                   array(get_class($this),'aaa'),
                   $string);

 

 クラスのメソッドが、インスタンスメソッドの場合とクラスメソッド(スタティックメソッド)の場合で記述が異なるので注意が必要とのこと

class ***{

    public static function func($val)
    {
      ....
       preg_replace_callback('/\[(.+?)\]/',
           array(self, 'bbb'),
           $val);
    }

    private static function bbb($array)
    {

PHP5.3からはもっと簡単に "self::argument2"

 /* "self::argument2"  >=PHP5.3 */
$string = preg_replace_callback('/&([A-Za-z]{2,8}[0-9]{0,2});/',
               "self::aaa",
               $string);

 

 

 

コメント