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です
コメント