php Пример оформления решения задачи в виде функции

(заметка относится, как минимум, к этому списку задач)

Возьмём код из решения задачки (один из учеников), и прокомментирую его:

/**
 * Эта функция, которая решает задачу
 * (комментарий в стиле phpdoc)
 * 
 * @param int $n  номер числа
 */
function fib($n)
{
	$a = 1;
	$b = 1;
	for ($d = 3; $d <= $n; $d++) {
		$c = $a + $b;
		$a = $b; 
		$b = $c;
	}		
	
	echo $c;
}

// а дальше идет  код (его называют "клиентским"), 
// который и использует нашу функцию

fib(7);// вызов функции с конкретными параметрами

Сейчас для нас не важно что именно делает функция, важно что снаружи она получает значение (в данном случае одно типа integer) и выполняет свою работу (в примере выше она рассчитывает по переданному параметру некоторое другое значение, и после того как рассчет окончен выводит полученное значение на экран в строке:

echo $c;

).

Обратите внимание, что эта функция оказывает побочный эффект прямо в своем теле (выводит значение на экран), а это не всегда удобно -- что если мы хотим просто использовать это значение снаружи, скажем просуммировав его с чем-то и только потом выводя на экран?

В этом случае оказывается, что функция, которая возвращает значение универсальнее той, которая его распечатывает (ведь то что возвращается всегда можно распечатать снаружи, как именно мы увидим ниже), поэтому "идеальным" с точки зрения повторного использования кода функции будет решение:

/**
 * Эта функция, которая решает задачу
 * (комментарий в стиле phpdoc)
 * 
 * @param int $n  номер числа
 * @return int
 */
function fib($n)
{
    $a = 1;
    $b = 1;
    for ($d = 3; $d <= $n; $d++) {
            $c = $a + $b;
            $a = $b; 
            $b = $c;
    }		

    return $c;
}

// а дальше идет  код (его называют "клиентским"), 
// который и использует нашу функцию

echo fib(7);// вызов функции с конкретными параметрами
// и сразу же распечатка

Уточним, для лучше понимания, что клиентский код в последнем примере можно было бы переписать как:

$result = fib(7);
echo $result;

Но для краткости записи кода, возвращаемое нашей пользовательской функцией fib() значение используется в echo() напрямую:

echo fib(7);