私はこの例のarray_filterコメントを見ていて、彼は引数をarray_filterに次のように渡します。
array_filter($subject, array(new array_ereg("image[0-9]{3}\.png"), 'ereg')
コールバックが複数の引数を持つ配列を受け入れるのはどうしてですか?そのうちの1つは実際のコールバック関数です
私はこの例のarray_filterコメントを見ていて、彼は引数をarray_filterに次のように渡します。
array_filter($subject, array(new array_ereg("image[0-9]{3}\.png"), 'ereg')
コールバックが複数の引数を持つ配列を受け入れるのはどうしてですか?そのうちの1つは実際のコールバック関数です
PHPではcallable
、配列を使用して次の形式で表現することができます。
array($object, 'methodName')
ドキュメント自体には次のように記載されています。
インスタンス化されたオブジェクトのメソッドは、インデックス0のオブジェクトとインデックス1のメソッド名を含む配列として渡されます。
これが$this
オブジェクト内の変数で使用されるのを見るのは非常に一般的です。
この例では、配列の最初の要素はで作成されnew
、は必須のインスタンス化さereg
れたオブジェクトであり、はメソッドです。
array_filter関数は、2番目のパラメーターの呼び出し可能オブジェクトを想定しています。PHPは、インスタンスメソッドおよび静的メソッド(またはバージョン5.2.3以降の単純なメソッド)に対して呼び出し可能であると理解します。array($instance, 'methodname')
array('classname', 'staticmethodname')
'classname::staticmethod'
他の答えを拡張するため。PHP> = 5.3では、クロージャを使用できます。
$numbers = range(1,10);
$newNumbers = array_filter($numbers, function($value) {
return ($value & 1) === false;
});
// $newNumbers now contains only even integers. 2, 4, 6, 8, 10.
PHP:コールバックのページをご覧ください。
呼び出し可能パラメーターに配列が指定されている場合は、オブジェクトとそのオブジェクトのメソッドを指定しています。例えば:
$object = new MyClass();
array_filter($input, array($object, 'myClassMethod'));
提供した例では、次のようになります。
array_filter($subject, array(new array_ereg("image[0-9]{3}\.png"), 'ereg');
array_eregの新しいインスタンスはオブジェクトであり、eregはarray_eregクラスのメソッドです。