Marlin онлайн-платформа

Функции

Итак, из урока вы узнали, что функция - это совокупность последовательных действий, объединённых для достижения одной задачи. Использование функций делает наш код более удобным для чтения и помогает избежать дублирования, если есть потребность совершить одно и то же действие в разных местах. У функции есть оператор - function, имя, аргументы - параметры, которые позволяют сделать нашу функцию более универсальной без привязки к конкретным значениям переменных, и тело, как у условных конструкций или циклов.

С синтаксисом функций вы уже знакомы, однако особое внимание следует уделить их именам:

  1. все синтаксические правила для имён переменных распространяются так же и на имена функций;
  2. выбирать имя для функции нужно так, чтобы оно отвечало на вопрос "что этот код делает?";
  3. в качестве имен для пользовательских функций нельзя использовать имена стандартных функций, встроенных в язык PHP.

Пример:

function func_1(){  
	echo('взять лейку');
	echo('набрать воды');
	echo('полить цветок');  //название функции не говорит о том, какие действия она выполняет
}

function waterFlowers(){  
	echo('взять лейку');
	echo('набрать воды');
	echo('полить цветок');  //так гораздо лучше, глядя на название функции, мы понимаем, что она делает
}


При работе с функциями вы скорее всего встретитесь с таким понятием, как область видимости переменной. Когда мы объявляем переменную внутри функции, мы задаём для неё локальную область видимости - это значит, что данная переменная будет доступна только внутри этой функции, снаружи мы к ней обратиться уже не сможем. Аргументы функции также являются переменными с локальной областью видимости. 
Переменные же с глобальной областью видимости видны во всех конструкциях и блоках кода в файле, с которым мы работаем. Однако PHP-разработчики сталкиваются с ограничением: глобальные переменные не доступны внутри функции. Обойти это ограничение можно с помощью передачи этих переменных через аргументы в функцию или же использовать оператор global перед нужной переменной.

Рассмотрим пример:

$a = 6;
$b = 3;

function calculate(){
	$c = $a + $b;  
	echo($c);
}

calculate();  //выведет ошибку, поскольку переменные $a и $b не видны этой функции


function calculate(){
	global $a, $b;
	$c = $a + $b;  
	echo($c);  
}

calculate();  //выведет 9, так как теперь эти переменные входят в область видимости функции


function calculate($numFirst, $numSecond){
	$sum = $numFirst + $numSecond;  
	echo($sum); 
}

calculate($a, $b);  //выведет 9, это самый оптимальный вариант передачи переменной в функцию, так как не привязан к названию глобальной переменной


Обратите внимание, что порядок аргументов при их передаче в функцию важен, а также важно их количество - если не указан хотя бы один обязательный аргумент, будет ошибка. Также аргументам можно задавать значения по умолчанию - для этого достаточно присвоить им значение в круглых скобках во время объявления функции, в таком случае, если аргумент не передан при вызове, его значение останется заданным по умолчанию:

$a = 5;
$b = 6;

function calculate($numFirst, $numSecond, $numThird = 2){
	$sum = $numFirst + $numSecond + $numThird;  
	echo($sum); 
}

calculate($a, $b);  //выведет 13


Последнее, о чём мы поговорим в этом уроке - это конструкция return. Когда нам нужно, чтобы функция вернула значение, а когда - нет? Как говорилось в видео-уроке, для тех случаев, когда нам необходимо совершить действие, но не получить результат для дальнейшей работы с ним, возвращать ничего не нужно. Однако если мы планируем в использовать результат функции, тогда следует использовать оператор return.

Например:

function waterFlowers(){
	echo('взять лейку');
	echo('набрать воды');
	echo('полить цветок');
}

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


function makeCake(){
	echo('взять ингридиенты');
	echo('всё смешать');
	$cake = echo('испечь пирог');
	return $cake;
}

makeCake();  //"робот" приготовит и отдаст нам пирог, который мы в дальнейшем сможем порезать и съесть

Return возвращает только одно значение, а если эта конструкция не используется, то функция возвращает null.
Имейте в виду, что после return функция завершает свою работу, а всё, что написано ниже, компьютером игнорируется.

 

ПОЯСНЕНИЯ И ПОЛЕЗНАЯ ИНФОРМАЦИЯ

  • Важен порядок аргументов при их передаче в функцию, а также важно их количество - если не указан хотя бы один обязательный аргумент, программа выбросит ошибку. 

 

  • Аргументам можно задавать значения по умолчанию в круглых скобках во время объявления функции. В таком случае, если аргумент не передан при вызове, подставится значение, указанное в скобках:
function greet($name = 'User'){  
    echo("Hello, $name!"); 
}

greet();  // мы не передали в функцию аргумент $name, поэтому она выведет "Hello, User!"

Имейте в виду, что необязательные аргументы должны стоять строго ПОСЛЕ обязательных! 

 

Их так же может быть несколько, однако в таком случае вы так же должны учитывать порядок их передачи в функцию при вызове. Если необязательных аргументов два или более, пропустить первый и сразу передать второй будет нельзя. Поэтому, когда вы определяете такую функцию, в самый конец ставьте те переменные, которые с наименьшей вероятностью будут переопределены при вызове.

 

  • При работе с функциями вы скорее всего встретитесь с таким понятием, как область видимости переменной. Когда мы объявляем переменную внутри функции, мы задаём для неё локальную область видимости - это значит, что данная переменная будет доступна только внутри этой функции, снаружи мы к ней обратиться уже не сможем. Аргументы функции также находятся в локальной области видимости. 
    Переменная же с глобальной областью видимости "видна" в любом месте файла, в котором находится. Однако и здесь есть ограничение: глобальные переменные не доступны внутри функций. Обойти его можно с помощью передачи этих переменных в функцию через аргументы или же использовать оператор global, хотя последнее - не самая лучшая практика. 

 

  • Конструкция return может вернуть только одно значение, а если она не используется, то функция по умолчанию возвращает null.

 

  • После выполнения return функция завершает свою работу, а всё, что будет написано ниже, компьютер проигнорирует.

 

Задание

Решите задачи:

  1. Сделайте функцию getDigitsSum() (digit - это цифра), которая параметром принимает целое число и возвращает сумму его цифр.
  2. Найдите все года от 1 до 2019, сумма цифр которых равна 13. Для этого используйте вспомогательную функцию getDigitsSum() из предыдущей задачи.
  3. Сделайте функцию, которая возвращает множественное или единственное число существительного. Пример: 1 яблоко, 2 (3, 4) яблока, 5 яблок. Функция первым параметром принимает число, а следующие 3 параметра — форма для единственного числа, для чисел два, три, четыре и для чисел, больших четырех. Например: func(3, 'яблоко', 'яблока', 'яблок').
  4. Сделайте функцию cut(), которая первым параметром будет принимать строку, а вторым параметром - сколько первых символов оставить в этой строке. Второй параметр должен быть необязательным и по умолчанию принимать значение 10.

Дополнительная секция

Вопрос-ответ Обсуждение