【PHP】callback関数で数値や日付のカウントアップした引数を渡す ~コピペで使えるサンプルソース付

PHP

PHPのcallback関数を使って数値や日付のカウントアップ文字列を取得する

callback(コールバック)関数とは?

callback関数は慣れるまで扱いが難しいです。

「ある関数に対して、内部のロジック自体を引数にして渡すことができます。」

PHPのcallbackで数値の連番や日付を1日ごとにカウントアップさせた結果を得る

PHPでcallbackを指定するためのサンプルを示します。

サンプルコード・ソース

<?php

    //======================================
    //①コールバックなし
    //======================================
    echo "-------------------------------" . PHP_EOL;
    print_mojiretsu();  //コールバック省略


    //======================================
    //②10ずつカウントアップする文字列を出力
    //======================================
    echo "-------------------------------" . PHP_EOL;
    
	$point = 0; //初期化

	for($idx = 0; $idx<5; ++$idx){
	    
    	print_mojiretsu(
    	    // callback部分 -------->
    	    function(){
        		global $point; //外のスコープの変数を使う
        		$point += 10;
        		return $point; //コールバックの返り値
        	}
    	    // --------> callback部分
    	);
	    
	}


    //======================================
    //③3日ずつカウントアップする文字列を出力
    //======================================
    echo "-------------------------------" . PHP_EOL;

    $date = "2021-04-01"; //初期化

	for($idx = 0; $idx<5; ++$idx){
	    
    	print_mojiretsu(
    	    // callback部分 -------->
    	    function(){
        		global $date; //外のスコープの変数を使う
        		$date = date("Y-m-d", strtotime($date . "+3days"));
        		return $date; //コールバックの返り値
        	}
    	    // --------> callback部分
    	);
	    
	}


    //======================================
    //本体の関数
    //======================================
	function print_mojiretsu($callback = null){


		if($callback == null){
			echo "コールバックを指定してね" . PHP_EOL;

		}else{
			$disp_val = $callback();
			echo "コールバック結果は{$disp_val}です" . PHP_EOL;
		}

	}

?>

出力結果

-------------------------------
コールバックを指定してね
-------------------------------
コールバック結果は10です
コールバック結果は20です
コールバック結果は30です
コールバック結果は40です
コールバック結果は50です
-------------------------------
コールバック結果は2021-04-04です
コールバック結果は2021-04-07です
コールバック結果は2021-04-10です
コールバック結果は2021-04-13です
コールバック結果は2021-04-16です

コメント

タイトルとURLをコピーしました