Отправляет email-рассылки с помощью сервиса Sendsay

PHP за чашкой кофе

  Все выпуски  

PHP за чашкой кофе Чашечка восьмая — функции


Информационный Канал Subscribe.Ru

PHP за чашкой кофе

Чашечка восьмая — функции

PHP за чашкой кофе

Доброго вам!

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

Что же такое?..

Объясню на примере: представим, что нам понадобилось сделать страницу, в которой выводился список — имя и фотография сотрудника фирмы. То есть, как минимум, код каждого сотрудника был бы примерно таким:
Пример 1. Примерный код описания сотрудника:
<html>
 <head>
  <title>Сотрудники нашей фирмы</title>
 </head>
 <body>

  <p><img src='foto/ivanov.jpg' width='100px' height='150px' align=left>
  Имя: <b>Иванов Иван Иванович</b>
  <br>Ответственный и профессиональный сотрудник, знающий своё дело.

  <p><img src='foto/petrov.jpg' width='100px' height='150px' align=left>
  Имя: <b>Петров Пётр Петрович</b>
  <br>Сотрудник, способный прекрасно справляться со своей работой.

  <p><img src='foto/maksimov.jpg' width='100px' height='150px' align=left>
  Имя: <b>Максимов Максим Максимович</b>
  <br>Вполне обычный сотрудник фирмы. Ничего выдающегося.

 </body>
</html>

А теперь представьте, что на странице должна быть указана информация о двух-трёх сотнях сотрудников! Код будет огромен! А главное, здесь будет неудобно использовать include() — имена-то, фотографии и характеристики разные.

Что делать?

И на помощь нам приходят функции! Что такое функция? Функция — это участок (фрагмент) кода, который используется или может использоваться во время выполнения скрипта неоднократно.

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

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

У всех функций есть единый общий вид. Он примерно такой:
Пример 2. Общий вид функции:
function ИМЯ_ФУНКЦИИ ($ПАРАМЕТР_1, $ПАРАМЕТР_2, $ПАРАМЕТР_3, ...) {
 КОД_ФУНКЦИИ
}

Поясняю: ИМЯ_ФУНКЦИИ — это, как Вы наверное поняли, имя функции. В PHP не может существовать двух функций с одним и тем же именем!

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

Код функции находится внутри фигурных скобок ( { и } ).

Ну, а теперь вернёмся к примеру с сотрудниками фирмы. Если раньше нам пришлось бы вручную вписывать каждого сотрудника, то с использованием функций мы легко можем решить задачу. Вот посмотрите на следующий код:

Пример 3. Изменённый с использованием функций первый пример:
<html>

<head>
<title>Сотрудники нашей фирмы</title>
</head>
<body>

<?
function sotrudnik($name, $foto, $text) {
// создаём новую функцию с именем sotrudnik
// и параметрами: $name — имя сотрудника,
// $foto — фотография сотрудника
// $text — характеристика сотрудника

echo (" <img src='" . $foto . "' width='100px' height='100px' align=left>");
// выводим фотографию

echo (" Имя: <b>" . $name . "</b>");
// выводим имя

echo ("<br>" . $text);
// выводим характеристику
}

// А теперь просто вызываем созданную функцию:
sotrudnik ("foto/ivanov.jpg", "Иванов Иван Иванович", "Ответственный и профессиональный сотрудник, знающий своё дело.");
sotrudnik ("foto/petrov.jpg", "Петров Пётр Петрович", "Сотрудник, способный прекрасно справляться со своей работой.");
sotrudnik ("foto/maksimov.jpg", "Максимов Максим Максимович", "Вполне обычный сотрудник фирмы. Ничего выдающегося.");
?>

</body>
</html>

Пожалуйста! Теперь нам не нужно повторять код вывода картинки, и другой HTML-код — всё это сделает за нас функция sotrudnik().

Заметьте: при вызове функций третий параметр ($text) я перенёс на следующую строку. Не волнуйтесь, это вполне нормальное явление. Вы точно также можете переносить параметры функций для удобства чтения кода.

Получаемое результатов

Подчас функция должна не только выполнить какие-то действия, но и вернуть нам результат этих действий. Если результатом должен стать HTML-код, который нужно вывести на экран, то тут всё просто — в самой функции мы используем конструкции echo() и сразу из функции выводим результаты на экран. Но что если функция не должна выводить результат работы на экран, а должна вернуть его программе для дальнейших операций с этим полученным значением?

Возвращение результата работы функции делается с помощью оператора return. Его формат таков:

Пример 4. Формат оператора return:
function ИМЯ_ФУНКЦИИ (ПАРАМЕТРЫ) {

КОД_ФУНКЦИИ

return РЕЗУЛЬТАТ;
}

Во всём этом коде нас интересует только строка возврата значения. Результатом может выступать какая-нибудь переменная, конкретное число или текст.

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

Пример 5. Функция «Квадрат числа»
<?php
function square($x) {
$y = $x * $x;
// переменная $y теперь содержит $x в квадрате

return $y;
// возвращаем значение $y

// после команды return никакие другие команды функции
// не выполняются
}

$kv=square(15);
// здесь вызывается функция square, которая получает
// в качестве значения $x число 15
// возвращаемое функцией значение записывается
// в переменную $kv

echo ($kv);
// и эта переменная выводится на экран
?>

Кстати, вместо двух строк функции ( $y = ... и return $y ) можно было использовать только одну: return $x * $x. Тогда PHP сначала вычислил бы произведение, а потом вернул бы нам результат.

Вспомните, во второй чашечке я приводил такой пример:

Пример 5. Пример скрипта «Дата и время» из второй чашечки:
<p>Дата и время:
<p><?php
    $d=date("d.m.Y H:i");
    echo($d);
?>

Обратите внимание на третью строку:

$d=date("d.m.Y H:i");

Вот Вам ещё один пример функции. Только уже функции, встроенной в PHP. Это функция date(). Её предназначение — вывод даты и времени в определённом формате. В этой строке date — это имя функции, а "d.m.Y H:i" — это строковый параметр, который передаётся функции. Результат работы функции записывается в переменную $d, которая потом и выводится.

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

Порой мы можем прямо при определении функции указать значения некоторых её параметров. Вот, например:
Пример 6. Значения функции по-умолчанию:
<?php
function bestLang ( $language = "PHP") {
echo (
"Лучший язык на свете — ");
echo (
$language);
echo (
"<br>");
}

bestLang();
bestLang("Perl");
?>

Как будет действовать PHP: при первом вызове функции bestLang() параметр не указан, значит будет выведено значение по-умолчанию — PHP. Во втором случае программист явно указал в качестве параметра $language слово Perl и будет выведено именно оно. Результат показан на рисунке 1.

Рисунок 1. Результат работы примера 6

При использовании аргументов функции со значениями по-умолчанию стоит помнить две вещи:

  1. Значение, которое указывается по умолчанию должно быть константой. То есть, нельзя указывать, например, такие значения: function bla ( $var = date()) { ... } или function bla ( $var = $x ) { ... }
  2. Сначала указываются аргументы функции без значений по-умолчанию, потом — со значениями по умолчанию. Ошибочный вариант: function bla ( $var=1, $x ) { … }. Правильный вариант: function bla ( $x, $var=1 ) { … }

Область видимости переменных

Область видимости является краеугольным камнем многих языков программирования. PHP в этом плане просто как валенок. Что такое область определения? Это тот участок кода скрипта, в котором переменная «видна».

Все переменные, которые были определены вне функции имеют глобальную область видимости. Те, которые были определены внутри — локальную область видимости. Что это значит? Посмотрим на пример:

Пример 7. Глобальная область видимости переменной:
<?php
$a
= 1;
// мы определили переменную $a
// она имеет глобальную область видимости, т.к. была
// определена вне всяких функций

function test() {
echo (
$a);
// переменная $a была определена вне всяких
// функций, а значит внутри функции не видна
// и её значение внутри функции неизвестно
}

test();
// вызвав функцию мы не получим результата — внутри
// функции переменная не видна
?>

А вот другой пример:

Пример 8. Локальная область видимости переменной:
<?php
function test() {
$a=1;
// определяем переменную $a внутри функции
}

test();

echo (
$a);
// результата мы также не получим, потому что
// переменная была определена внутри функции и
// вне её значение переменной неизвестно
?>

Если Вам нужно «увидеть» переменную, определённую вне функции, внутри её, то Вы должны использовать ключевое слово global. Вот пример наглядно показывающий такое применение:

Пример 9. Способ «увидеть» внутри функции переменную, объявленную вне её:
<?php
$a
=1;
$b=2;
$c=0;

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

test();
echo (
$c);
// результат — 3. Всё работает.
?>

Статические переменные

Посмотрите на следующий пример:
Пример 10. Бесполезная функция:
<?php
function test() {
$a = 0;
echo (
$a);
$a++;
}

test();
test();
?>

Этот пример совершенно бесполезен: каждый раз при вызове функция test() создаёт «внутри» себя переменную $a, присваивает ей нулевое значение, выводит это значение и увеличивает его на единицу. Вот только увеличивание ничего не даёт: при выходе из функции переменная будет удалена.

Статическая переменная — это переменная, которая сохраняет своё значение между разными вызовами одной функции.

Вот как оживить пример:

Пример 11. Исправленная функция:
<?php
function test() {
static
$a = 0;
echo (
$a);
$a++;
}

test();
test();
?>

Теперь, каждый раз при вызове функция test() будет выводить значение $a и увеличивать его. Чтобы лучше понять, как это действует, давайте разберём действия PHP по шагам:

  1. При первом вызове функции test(), PHP создаёт переменную $a и присваивает ей нулевое значение.
  2. Потом он выводит значение $a — ноль на экран и увеличивает значение на 1.
  3. При втором вызове переменная $a уже известна, а потому ещё раз она не будет создана.
  4. PHP выведет текущее значение — единицу и снова увеличит это значение на 1.
  5. Последующие вызовы функции действуют также: пропускают создание переменной (она уже создана), выводят значение и увеличивают его на 1.

Учитывая объём всей информации я советую Вам постараться полностью разобраться со всеми аспектами работы с функциями. А для улучшения результатов предлагаю Вам несколько заданий по функциям:
  1. Помните, в пятой чашечке я показывал пример создания таблицы умножения (пример 11)? Задача: сделать универсальную функцию, которая выводила бы такую таблицу. Функция должна принимать два параметра: начальное и конечное значение в таблице.
  2. Сделать функцию, которая получает число от 1 до 10 и возвращает результат проверки: простое ли это число. Напомню: число называется простым если оно делится нацело только на само себя и на единицу.
  3. Написать функцию, которая находит сумму целых чисел от 1 до N (N объявляется вне функции).

Все результаты присылайте на мой e-mail: eugene@phpbook.com.ru, если будут какие-то вопросы — пишите туда же.

Удачи!


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: inet.webbuild.phplearn
Отписаться

В избранное