- debug_backtrace: documentation ( source)
<?php
const START = 1;
const END = 100;
/**
* バックトレースの深さからインデックス相当の値を取得
* @return int
*/
function getI()
{
// debug_backtrace: バックトレースを配列で生成
// @see https://www.php.net/manual/ja/function.debug-backtrace.php
// count: 配列の長さを取得
// @see https://www.php.net/manual/ja/function.count.php
return count(debug_backtrace()) - 2 + START;
}
/**
* 再帰で Fizz, Buzz を echo
*/
function echoFizzBuzz()
{
if (getI() % 15 === 0) {
echo getI().': FizzBuzz';
} elseif (getI() % 3 === 0) {
echo getI().': Fizz';
} elseif (getI() % 5 === 0) {
echo getI().': Buzz';
} else {
echo getI().': '.getI();
}
echo "\n";
// 再帰で一次変数抜きにループを実現する
// 再帰でバックトレースを深くしてインデックスを進める
if (getI() < END) {
echoFizzBuzz();
}
}
echoFizzBuzz();