【PHP/演習問題】無名関数(クロージャー)[2]

【PHP/演習問題】無名関数(クロージャー)[2]

問題

複数数値の一覧と合計値を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 複数数値は標準入力で与える(空文字が入力されるまで)
  • 複数数値の一覧を出力する処理を行う無名関数を作成する
  • 複数数値の合計値を戻り値として返す処理を行う無名関数を作成する
  • execute関数を下記の次の仕様で作成する
    引数: 複数数値、クロージャー
    処理: クロージャーを呼び出し、引数に複数数値を与える
$ php practice.php
===  Input  ===
> 123
> 456
> 789
> 
=== Closure ===
123
456
789
total : 1368
$ php practice.php
===  Input  ===
> 1234
> 3456
> 5678
> 7890
> 
=== Closure ===
1234
3456
5678
7890
total : 18258

解答例

<?php

$detail_closure = function( $values ) {
    foreach( $values as $value ) {
        echo $value."\n";
    }
};

$sum_closure = function( $values ) {
    $total = 0;
    foreach( $values as $value ) {
        $total += $value;
    }
    return $total;
};

echo "===  Input  ===\n";
$values = [];
while( true ) {
    echo '> ';
    $value = trim(fgets(STDIN));
    
    if( $value == '' ) {
        break;
    }
    
    $values[] = $value;
    
}

function execute( $values, $closure ) {
    return $closure($values);
}

echo "=== Closure ===\n";
execute($values, $detail_closure);
$total = execute($values, $sum_closure);
echo 'total : '.$total."\n";

?>