PHP コールバック関数

目次

コールバック関数とは

  • 関数やメソッドを引数として別の関数に渡し、その中で呼び出す仕組みのことです。
  • 関数の実行タイミングをコントロールできます。

コールバック関数のサンプルです。

<?php

//コールバック関数
function testfunc1() {
	echo "Hello World";
}
  
function testfunc2($callback1) {
	$callback1();
}

testfunc2("testfunc1"); //Hello World

?>

4~6行目は、コールバック関数です。
12行目で、8行目の関数を実行します。引数として4~6行目のコールバック関数をセットしています。
8行目で引数として受け取ったコールバック関は、9行目で実行されます。

call_user_func (コールバック関数を呼び出すための関数)

call_user_func ( callable $callback [, mixed $... ] ) : mixed

call_user_func関数は、コールバック関数を呼びます。

<?php
class Color
{
    public function getColor()
    {
        echo "red";
    }
}

function testfunc1($array1)
{
    call_user_func($array1);
}

$c1 = new Color();
testfunc1(array($c1, "getColor"));  # red

?>

2~8行目は、クラスです。
12行目は、call_user_func関数です。
16行目は、10行目の関数を呼び出しています。
対象がオブジェクトの場合は、配列のarrayを使用します。
1つめの要素はオブジェクトで、2つめの要素はメソッド名を指定します。

call_user_funcで引数がある場合

<?php
class Color
{
    public function getColor($color1)
    {
        echo "red and " . $color1;
    }
}

function testfunc1($array1,$str1)
{
    call_user_func($array1,$str1);
}

$c1 = new Color();
testfunc1(array($c1, "getColor"),"blue");  # red and blue

?>

16行目は、引数の文字列がひとつあります。

call_user_func_array (引数が配列の場合)

call_user_func_array ( callable $callback , array $param_arr ) : mixed

call_user_func_array関数は、引数が複数あるコールバック関数に対応できます。

<?php
class Color
{
    public function getColor($color1,$color2)
    {
        echo $color1 . " and " . $color2;
    }
}

function testfunc1($array1,$array2)
{
    call_user_func_array($array1,$array2);
}

$c1 = new Color();
testfunc1(array($c1, "getColor"),array("blue","green"));  # blue and green

?>

12行目は、call_user_func_array関数です。
16行目は、10行目の関数を呼び出しています。
1つめの配列のarrayは、オブジェクトとそのメソッドを指定しています。
2つめの配列のarrayは、コールバック関数の2つの引数を指定しています。

関連の記事

PHPクラスの仕組みと使い方

△上に戻る