PHP Version 5.1.6 です。
以下のようなクラスを書いていたのですが、
//-----------------------------------------------------------
class PreventAttack{
public static function TopStaticMethod(){
self::ExcludeNullbyte();
}
private static function ExcludeNullbyte(){
$_GET = self::ExcludeNullbyte_Exec( $_GET );
$_POST = self::ExcludeNullbyte_Exec( $_POST );
$_COOKIE = self::ExcludeNullbyte_Exec( $_COOKIE );
return;
}
private static function ExcludeNullbyte_Exec($param){
if ( is_array( $param ) ) {
return array_map('ExcludeNullbyte_Exec', $param );
}
return str_replace( "\0", "", $param );
}
}
//-----------------------------------------------------------
Warning: array_map() [function.array-map]: The first argument, 'ExcludeNullbyte_Exec', should be either NULL or a valid callback in /var/www/(中略)include/class/PreventAttack.class on line 39
と怒られてしまいました。
39行目は、下から5行目のarray_mapのところです。
で、このエラーメッセージでグーグルで検索して、いろいろたどっていったら、
http://jp.php.net/manual/ja/language.pseudo-types.php#language.types.callback
にたどりつき、
このページのユーザコメント欄に、
//-----------------------------------------------------------
To recap mr dot lilov at gmail dot com's comment: If you want to pass a function as an argument to another function, for example "array_map", do this:
regular functions:
<?
array_map(intval, $array)
?>
static functions in a class:
<?
array_map(array('MyClass', 'MyFunction'), $array)
?>
functions from an object:
<?
array_map(array($this, 'MyFunction'), $array)
?>
I hope this clarifies things a little bit
//-----------------------------------------------------------
と書いてあったので、
return array_map(array('ExcludeNullbyte_Exec', $param );
のところを、
return array_map(array('PreventAttack','ExcludeNullbyte_Exec'), $param );
に変えたら、エラーがなくなりました。
・・・が、その理屈がいまいちわかりません。
どなたかおわかりの方がいらっしゃいましたら、お教えいただけないでしょうか?
よろしくお願いいたします。
お礼
ご回答ありがとうございます。 すみません、見逃してしまいました。 やっと理解しました。 どうもありがとうございました。