Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

php1_2m

.pdf
Скачиваний:
29
Добавлен:
11.03.2016
Размер:
5.29 Mб
Скачать

Урок 2

Ветвления и функции

Вэтом уроке Вы

научитесь разветвлять программу;

узнаете, что такое функции;

научитесь использовать свой код повторно;

узнаете, зачем нужны функции;

узнаете про области видимости переменных и время их жизни.

1.Ветвление программы

1.1Оператор if

Ветвление – это выполнение определённой команды (набора команд) только при условии истинности некоторого логического выражения. По сути, ветвление – это разделение программы на варианты в зависимости от определённых условий.

В самом простом виде использование оператора if выглядит так:

if (Условие) Действие;

Условие - это любое выражение, возвращающее булевское значение (true, false), т.е. такой вопрос, на который ответить можно только двумя способами: либо да, либо нет. Действие выполняется тогда, когда условие истинно (true). Обычно условием является операция сравнения, либо несколько таких операций, объединённых логическими связками (И, ИЛИ). В результате проверки какого-либо условия может выполняться сразу несколько операторов, тогда они образуют блок, который должен быть заключен в фигурные скобки:

if (Условие)

{

Действие1; Действие2;

}

Если по условию нужно выполнять всего один оператор, то можно не ставить фигурные скобки. Например:

$x = 15; $y = 10;

if ($x > $y) echo $x;

else

echo $y;

Таким нехитрым образом мы сделали скрипт, который выводит на экран наибольшее из двух чисел.

PHP. Уровень 1 | Урок 2

1

 

 

Часто возникает необходимость указать какие-либо действия не только, когда условие верно, но и когда оно ложно. В этом случае используется ключевое слово else:

if (Условие)

{

Блок операторов1

}

else

{

Блок операторов2

}

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

Получается, что у нас есть 3 варианта: либо первое число больше, либо второе, либо они равны. Решение может выглядеть так:

$x = 10; $y = 15;

if ($x >

$y)

// Условие 1

echo "$x > $y";

// Блок 1

elseif ($x < $y)

// Условие 2

echo "$x < $y";

// Блок 2

else

 

// Блок 3

echo "$x = $y";

В данном случае интерпретатор PHP проверит сначала Условие1, убедится, что оно ложное, затем Условие 2. Поскольку оно даёт истину, выполнение войдет внутрь второго блока операторов. В результате на экране мы увидим 10 < 15. Для того, чтобы лучше понять работу конструкции elseif, перепишите данный пример и поэкспериментируйте с ним, меняя начальные значения $x и $y.

1.2 Тернарный оператор условия

Тернарный оператор – это операция, возвращающая либо второй, либо третий операнд в зависимости от условия (первого операнда). Звучит страшно, однако выглядит он достаточно просто:

(Условие) ? (Операнд по истине) : (Операнд по лжи);

Например, мы хотим сохранить максимальное из двух произвольных чисел в какую-то переменную. В этом случае, вместо громоздких строк ветвления, можно написать:

$x = 10; $y = 15;

$max = ($x > $y) ? $x : $y

Тернарный оператор – красивая возможность, делающая код лаконичнее.

PHP. Уровень 1 | Ветвления и функции

2

 

 

1.3 Оператор switch

Теперь представим ситуацию, в которой нам нужно разделить программу не на 2 или 3 варианта, а на большее количество. Конечно, мы можем много раз использовать конструкцию elseif, однако, это может привести к серьёзному ухудшению читаемости кода. Поэтому, существует специальный оператор выбора из нескольких вариантов – switch. Он имеет следующий синтаксис:

switch (Переменная)

{

case Вариант1:

Блок операторов1; break;

case Вариант2:

Блок операторов2; break;

default:

Блок операторов3;

}

Оператор switch смотрит на значение переменной (вместо неё также может стоять выражение, возвращающее значение) и сравнивает его с предложенными вариантами. В случае совпадения выполняется соответствующий блок кода.

Если же после прохода по всем вариантам совпадения так и не обнаружилось, то выполняются операторы из блока default. Это необязательный блок, и он может отсутствовать.

Обратите внимание на ключевое слово break в конце каждого блока case. Оно ставится в 99% случаев и означает, что нужно прекратить выполнение операций внутри switch. В случае, когда в конце блока case нет оператора break, интерпретатор продолжит выполнять действия из следующих блоков.

Перепишите следующий пример и соотнесите его работу с теоретическим описанием оператора switch:

$now = 'evening';

switch ($now)

{

case 'night':

echo 'Доброй ночи!'; break;

case 'morning':

echo 'Доброе утро!'; break;

case 'evening':

echo 'Добрый вечер!'; break;

default:

echo 'Добрый день!'; break;

}

Здесь обязательно нужно ставить оператор break, иначе есть риск, что пользователь увидит 2 приветствия подряд.

PHP. Уровень 1 | Ветвления и функции

3

 

 

2. Функции

Для начала попробуем понять, зачем вообще могут быть нужны функции. Представьте, что в процессе выполнения программы нам часто приходится делать одинаковые действия, например, находить среднее арифметическое для набора чисел. Вроде бы алгоритм несложный – сложить все числа и поделить на их количество. Однако, это всё равно займёт несколько строк кода. В итоге, если в программе данное действие необходимо было выполнить много раз, мы получим огромное количество повторяющихся и похожих друг на друга кусков кода.

Для того,чтобы этого не возникало, придуманы функции.

2.1 Определение функции

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

По сути, написание функции – это создание некоторого автономного работника внутри программы. Мы будем передавать ему данные на вычисление, а он будет возвращать нам результат.

Функция в PHP объявляется с помощью ключевого слова function. За ним следует название функции, которое мы придумываем сами. Затем в круглых скобках через запятую указываются параметры, которые данная функция принимает. По сути, параметры – это входные данные для функции, над которыми она будет выполнять какуюто работу. После указания параметров в фигурных скобках следует тело функции.

function ИМЯ_ФУНКЦИИ(ПАРАМЕТРЫ)

{

Набор действий

}

Например, создадим собственную функцию для сравнения чисел:

function compare_numbers($x, $y)

{

if ($x > $y)

echo "$x > $y"; elseif ($x < $y)

echo "$x < $y"; else

echo "$x = $y";

}

Теперь, если мы захотим в процессе выполнения программы сравнить несколько пар чисел, то нам не придётся постоянно писать одинаковый код. Достаточно будет просто несколько раз вызвать функцию, передав ей разные параметры:

compare_numbers(5, 7);

// Выведет 5

<

7

 

compare_numbers(8, 8);

// Выведет 8

=

8

 

 

 

 

 

PHP. Уровень 1 | Ветвления и функции

 

 

4

 

 

 

 

 

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

Функция всегда возвращает значение. Если это не указать явно, то будет возвращено NULL. Оператор return позволяет завершить выполнение функции, вернув конкретное значение. Если в функции не указано, что она возвращает, то, по сути, результатом её работы может являться только вывод какого-то текста на экран (см. предыдущую функцию). Однако, в большинстве случаев, мы хотим использовать результат работы функции в остальной программе. Тогда необходимо использовать оператор return. Например, напишем функцию, возвращающую среднее арифметическое двух чисел:

function average($x, $y)

{

return ($x + $y)/2;

}

Теперь мы всегда сможем сохранить результат её работы в переменную:

$avg = average(5, 7);

В этом и заключается основный смысл функций. Мы создаём работника, которым в дальнейшем пользуемся для получения результата. На таком коротком примере вряд ли на 100% видна выгода от создания функций, однако, представьте, что код некоего вычисления значения занимал бы не одну строчку кода, а десять. И сравните перспективы двух вариантов: постоянно дублировать одинаковые куски кода в программе, или всего один раз написать функцию, а затем просто просить посчитать её результат.

2.2 Значения по умолчанию

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

<?php

function mult($a, $b = 1)

{

return $a * $b;

}

echo mult(8); echo mult(8, 2); ?>

Сначала функция echo выведет значение 8, а потом 16. В первом случае мы вызвали функцию только с одним параметром, поэтому переменная $b (второй параметр) получила значение по умолчанию. Во втором случае, как и положено, переменной $b присваивается значение 2.

PHP. Уровень 1 | Ветвления и функции

5

 

 

2.3 Рекурсия

Внутри блока кода функций можно пользоваться абсолютно любыми средствами языка PHP также, как и вне функций. В том числе, существует возможность вызова функцией самой себя. Эта операция и называется рекурсией. Для нас она будет являться не более, чем учебным примером, поскольку используется достаточно редко, в частности, для решения сложных задач (например, обход файловой системы, построение дерева и др.).

Разберем самый просто пример использования рекурсии – вычисление факториала:

function fact($x)

{

if ($x == 1) return 1;

else

return $x * fact($x - 1);

}

Факториал n – это произведение всех натуральных числе до n включительно. В математике факториал обозначается символом «!». То есть, к примеру, 4! = 1*2*3*4.

В рекурсии всегда важно увидеть закономерность. Здесь она выражается в том, что 4! = 4 * 3!. А, в свою очередь, 3! = 3 * 2!. Т.е., в общем случае x! = x * (x – 1)!.

Представим, что мы вызвали функцию:

echo fact(4);

Сначала осуществляется проверка переданного параметра. Поскольку аргумент не равен единице, мы возвращаем $x * fact($x - 1), т.е. 4 * fact(3). В свою очередь, fact(3) заменится на 3 * fact(2). Это будет продолжаться до тех пор, пока функция не вернёт 1. Случится это в момент вызова fact(1).

В итоге мы получим следующую цепочку замен:

fact(4) -> 4 * fact(3) -> 4 * 3 * fact(2) -> 4 * 3 * 2 * fact(1) -> 4 * 3 * 2 * 1

Рекурсией нужно пользоваться осторожно. Например, если в программе написать fact(-1), то функция никогда не попадет на строчку

return 1;

3. Областьвидимости и время жизни переменных

Переменные по области видимости можно разделить на глобальные и локальные. К первым можно обращаться из любого места программы, вторые доступны только в конкретном ее месте.

Все переменные, которые объявлены в теле скрипта вне функций, – глобальные. Переменные, объявленные в функциях, имеют локальную область видимости.

Переменные, которые функция принимает в качестве параметров, также являются локальными.

PHP. Уровень 1 | Ветвления и функции

6

 

 

Рассмотрим следующий пример:

<?php

function changeX($x)

{

$x += 5; echo $x;

}

 

$x = 1;

// выводит 1

echo $x;

changeX($x);

// выводит 6

echo $x;

// выводит 1

?>

 

Переменная $x, объявленная внутри функции changeX, не имеет никакого отношения к глобальной $x, объявленной сразу после функции. Локальные переменные сохраняют свое значение только во время выполнения функции, а после её завершения стираются из памяти компьютера. Команда $x += 5 меняла значение локальной переменной, так как отрабатывала внутри функции. Глобальная переменная, при этом, оставалась неизменной.

Поэтому скрипт выводит последовательность «161».

Самоконтроль

Что такое ветвление

На сколько вариантов разделяется программа с помощью конструкции if-else

Как можно разделить программу более, чем на 2 варианта

Как грамотно оформлять конструкцию if-else

Что такое тернарный оператор

Как работает оператор switch

Зачем в конце блоков case ставится оператор break

Зачем вообще нужен оператор switch

Что такое функция

Как создать собственную функцию

Какую выгоду дают функции

Что делает оператор return

Даёт ли оператор return какую-либо выгоду

Что такое параметры по умолчанию

Чем отличаются локальные и глобальные переменные

Когда стираются переменные, объявленные внутри функции

Что такое рекурсия

PHP. Уровень 1 | Ветвления и функции

7

 

 

Домашнее задание

Базовый блок

1.Объявите две целочисленные переменные $a и $b и задайте им произвольные начальные значения. Затем напишите скрипт, который работает по следующему принципу:

a.если $a и $b положительные, выведите их разность;

b.если $а и $b отрицательные, выведите их произведение;

c.если $а и $b разных знаков, выведите их сумму.

Ноль можно считать положительным числом.

2.Присвойте переменной $а значение в промежутке [0..15]. С помощью оператора switch организуйте вывод чисел от $a до 15;

3.Реализуйте основные 4 арифметические операции (+, -, *, %) в виде функций с двумя параметрами. Обязательно используйте оператор return.

4.Реализуйте функцию с тремя параметрами: function mathOperation($arg1, $arg2, $operation), где $arg1, $arg2 – значения аргументов, $operation – строка с названием операции. В зависимости от переданного значения операции выполните одну из арифметических операций (используйте функции из пункта 4) и верните полученное значение (используйте switch).

Продвинутый блок

5.С помощью рекурсии организуйте функцию возведения числа в степень. Формат: function power($val, $pow), где $val – заданное число, $pow – степень.

6.Напишите функцию, которая вычисляет текущее время и возвращает его в формате с правильными склонениями, например:

22 часа 15 минут

21 час 43 минуты итд.

Подсказка: часы и минуты можно узнать с помощью встроенной функции PHP – date.

PHP. Уровень 1 | Ветвления и функции

8

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]