現在の言語: 日本語

戻る

インスタンスメソッド/静的メソッド
コールバック関数

[コールバック関数について]
PHPのcallableとは、「関数として呼び出すことができるデータ型」を表す型ヒントです。
関数が引数として別の関数を受け取る(高階関数)際などに、
「実行可能なものだけを許可する」ために使用されています。
※PHP 5.4から使用可能

オブジェクトメソッドを変数としてコールバック関数を実行
静的メソッド
(例)
[引数なし]
$func = $cls::testMethod();
[引数あり]
$func = $cls::testMethod(...);

インスタンスメソッド
(例)
[引数なし]
$func = $cls->testMethod();
[引数あり]
$func = $cls->testMethod(...);

[サンプル]

copy
class test1
{
	function test1(array $ary1, array $ary2):int
	{
		$total =0;
		$this->sum($total, $ary1);
		$this->sum($total, $ary2);
		return $total;
	}
	private function sum(int &$num, array $ary):void
	{
		for($i=0; $i < count($ary); $i++)
		{
			$num += $ary[$i];
		}
	}
	static function test2(int $num1, int $num2):int
	{
		return $num1 + $num2;
	}
}
echo "<pre>";
$cls1= new test1();
//インスタンスメソッド
$func1 = $cls1->test1(...);
$ary1=[];
$ary2=[];
$ary1[]=10;
$ary2[]=1;
$ary2[]=2;
echo $func1($ary1, $ary2).PHP_EOL;//13
//静的メソッド
$func2 = $cls1::test2(...);
$num1 =2;
$num2 =3;
echo $func2($num1, $num2).PHP_EOL;//5
echo "</pre>";
copy
class test1
{ 
	function test1(array $ary1, array $ary2):int 
	{ 
		$total =0; 
		$this->sum($total, $ary1); 
		$this->sum($total, $ary2); 
		return $total; 
	} 
	private function sum(int &$num, array $ary):void 
	{ 
		for($i=0; $i < count($ary); $i++) 
		{ 
			$num += $ary[$i]; 
		} 
	} 
	static function test2(int $num1, int $num2):int 
	{ 
		return $num1 + $num2; 
	}
}
echo "<pre>";
$cls1= new test1();
//instance method
$func1 = $cls1->test1(...);
$ary1=[];
$ary2=[];
$ary1[]=10;
$ary2[]=1;
$ary2[]=2;
echo $func1($ary1, $ary2).PHP_EOL;//13
//Static Method
$func2 = $cls1::test2(...);
$num1 =2;
$num2 =3;
echo $func2($num1, $num2).PHP_EOL;//5
echo "</pre>";

インスタンスメソッド
コールバックは
他の関数に引数として渡したり
変数に代入して後から実行できるようにする
関数をいいます。
今回のサンプルは
インスタンスメソッドのケースでは
実行可能なオブジェクトを変数に代入して実行しています。
また、静的メソッドのケースでも
静的メソッド(共通関数として動作可能なメソッド)を取得して変数に代入し、
変数を実行時に必要な引数を設定して()で実行しています。

$func1 = $cls1->test1(...);
$cls1->test1を$func1変数に設定します。
$func1に()をつけるとインスタンスオブジェクトのメソッドを実行できます。
引数には...としています。
これで、$func1($ary1, $ary2)のように引数の部分に配列を2個設定しています。

静的メソッド
$func2 = $cls1::test2(...);
$func2に()をつけると変数にした静的メソッドを実行できます。



戻る

著作権情報
ホームページおよプリ等に掲載されている情報等については、いかなる保障もいたしません。
ホームページおよびアプリ等を通じて入手したいかなる情報も複製、販売、出版または使用させたり、
または公開したりすることはできません。
当方は、ホームページおよびアプリ等を利用したいかなる理由によっての障害等が発生しても、
その結果ホームページおよびアプリ等を利用された本人または他の第三者が被った損害について
一切の責任を負わないものとします。