![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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-type …
にたどりつき、
このページのユーザコメント欄に、
//-----------------------------------------------------------
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 );
に変えたら、エラーがなくなりました。
・・・が、その理屈がいまいちわかりません。
どなたかおわかりの方がいらっしゃいましたら、お教えいただけないでしょうか?
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
あなたが見つけたページにちゃんと書いてあるようですけど?
http://jp.php.net/manual/ja/language.pseudo-type …
より引用。
| オブジェクトのインスタンスを渡すための方法の 1 つは、 オブジェクトを 0 番目の要素、
| メソッド名を 1 番目の要素として含む配列を渡すことです。
| 静的なクラスメソッドの場合、 0 番目の要素としてオブジェクトを渡す代わりにクラス名を渡すことにより、
| オブジェクトのインスタンスを作成せずに渡すことができます。
コールバック関数が静的クラスメソッドならそのような書き方をすべしとちゃんと書かれてます。
(そのすぐ下に例まで載ってます。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PHP ファイルの書き込みについて教えて下さい。 1 2023/03/20 12:01
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
- WordPress(ワードプレス) wordpressでphpを読み込みたい 1 2022/10/30 23:40
- PHP ワードプレスサイト PHP8.0.25でのWarningエラー 1 2023/06/12 11:44
- JavaScript 画像の表示位置 3 2022/12/23 08:25
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
行列
-
fgetc関数について
-
Perlで重複行を削除したい
-
PHPで10連ガチャを作成したいの...
-
verilogで、配列の一部をタスク...
-
class内部でarray_mapをつかう...
-
php で1から100までの素数の表...
-
プログラミングのPythonのnoteb...
-
CArrayの要素としてCStringArra...
-
配列の比較
-
foreachの実行結果について
-
PHPでユニークIDを作る
-
テーブルの項目内に「含まれる...
-
プルダウンメニューにDBの内容...
-
配列をループでたくさん宣言し...
-
PHPで、CSVファイルを、指定し...
-
foreachで上限回数指定方法また...
-
$_SESSIONに二次元配列を使える...
-
別ファイルの構造体の値を読み...
-
SELECT 使用時の bindValue の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラミングのPythonのnoteb...
-
スカラーのベクトル微分
-
特定の文からメールアドレスの...
-
CArrayの要素としてCStringArra...
-
C言語 最大値と最小値を求めて...
-
行列
-
読み(あ行~わ行)ごとに分け...
-
配列の要素(value)に、変数を...
-
C言語の配列をPush(追加)する...
-
STLのvectorで作った配列をメン...
-
php で1から100までの素数の表...
-
【PHP】配列のキー名の修正は可...
-
Perlで重複行を削除したい
-
fgetc関数について
-
CArrayのソート
-
ファイルの書き込みについて教...
-
配列の添え字が小数だとどうなる?
-
PHPのmin関数、「1」以上の数値...
-
forとかで連番の変数を一気に格...
-
delphi 2次元配列がわかりません
おすすめ情報