php オブジェクト内のメソッドをcallback関数として渡す場合の注意点
array_filterやarray_mapなどcallback関数を引数にとる関数がphpには多く存在します。
callback関数の渡し方でのハマりどころが1点あったので共有しておきます。
ほとんどのケースが例1 コールバック関数の例に記載されていますが、 オブジェクト内から同じオブジェクト内のメソッドをコールする場合の記載がありません。(タイプ 3: オブジェクトメソッドのコールと同等なので必要ないと言えばないのですが)
オブジェクト内から同じオブジェクト内のメソッドをコールする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
上記のコードは一見正しく見えますが実行すると Warning: array_filter() expects parameter 2 to be a valid callback, function 'my_callback' not found or invalid function name
とエラーになります。
同じオブジェクト内からコールする場合でもcallbackは配列で指定する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
注意. オブジェクトは常に指定すること
1.誤
のコードでもエラーなく動作させることはできます。
以下のコードを実行するとエラーは発生せず、結果としてArray ( [0] => 1 [2] => 3 [4] => 5)
が出力されます。
名前の一致が生じて予期しない挙動をしておりバグの元となるので、オブジェクトは常に指定するよう注意しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|