В избранное    Домой    Карта сайта          Adminka

Пятница,  26 May 2017 г., 09:40
Ибо так возлюбил Бог мир, что отдал Сына Своего единородного, дабы всякий, верущий в Него, не погиб, но имел жизнь вечную. Ибо не послал Бог Сына своего в мир, чтобы судить мир, но чтобы мир спасен был через Него.Верущий в Него не судится, а не верующий уже осужден, потому что не уверовал во имя единородного Сына Божия. /Евангелие от Иоанна/

 Логин:  

 Пароль: 




Анонсы:
=== Дата: 15/07/2011     Автор: Крис Ньюман ===

PHP. Урок 4 Функции

Урок 4. Функции

В этой главе вы узнаете, как вынести часто используемую часть кода в отдельную функцию.

Применение функций

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

Раньше рассматривалось применение функции date для того, чтобы сгенерировать текущую дату. Рассмотрим внимательно пример из урока 1, “Знакомство с PHP”. Он выглядит так:

echo date (‘j F Y’);

В электронном справочнике по PHP приводится следующий прототип этой функции:

string date (string format [, int timestamp])

Это значит что функции date передается строчный аргумент format и необязательный целый аргумент timestamp. Функция возвращает строчный тип. В этом примере передается j F Y как форматирующий аргумент, но нет аргумента timestamp. Команда echo выводит результат действия функции.

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

Кроме встроенных функций, PHP позволяет задавать собственные. Такой механизм имеет ряд преимуществ. Сокращается количество кода, который нужно набирать, повышается гибкость и понятность сценария. Если нужно изменить поведение функции, изменения вносятся в месте определения функции. А не в местах, где используется код.

В следующем примере показывается, как задать и использовать функцию в PHP:

function add_tax($amount){
    $total = $amount * 1.09;
    return $total;
}
$price = 16.00;
echo “Цена без налога: $price <br >”;
echo “Цена с налогом: ”;
echo add_tax($price);

Ключевое слово function определяет функцию add_tax, которая выполняет код в фигурных скобках (тело функции). Тело функции обязательно надо заключать в фигурные скобки. Определение функции add_tax требует одного аргумента $amount, который заключен в круглые скобки. Переменная $amount содержит переданный аргумент и доступна в теле функции.

В первой строке кода производится обычное перемножение $amount на 1.09. Это эквивалентно добавлению 9% к начальному значению. Результат сохраняется в переменной $total. За ключевым словом return становится значение, которое функция возвращает, как результат. После запуска этого сценария на выходе получим:

Цена без налога: 16
Цена с налогом: 17.44

Этот пример показывает, как использовать функцию в разных местах Web-страницы. Например, нужно вывести список товаров, которые есть на складе. Для этого вызывается функция, чтобы показать цену с учетом налога. Если процент налога изменяется, достаточно поменять коэффициент в функции add_tax, и все цены автоматически изменятся на необходимую величину.

Аргументы и возвращаемые значения

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

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

<?php phpinfo();?>

Если создать такой сценарий и зайти на соответствующую страницу, на экране появится системная информация и настройка PHP.

Удачный и неудачный результат выполнения

Функция генерирует собственный вывод, поэтому не нужно ставить echo. Правда, из-за этого нельзя присвоить генерируемый вывод переменной. Кроме того, phpinfo всегда возвращает 1.

Возвращение True или False. Функции, которые не возвращают результат, используют определенный код, чтобы известить об успешности выполнения операции. Обычно нулевое значение (FALSE) сигнализирует о неудаче, а ненулевое (TRUE) свидетельствует об успешном завершении операции.

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

if (mail(“chris@lightwood.net”,
“Привет”, “Это тестовое письмо”)) {
echo “Письмо успешно отправлено”;
}
else {
    echo “Письмо нельзя отправить”;
}

Если Web-сервер не настроен для отправки писем или при отправке письма случилась ошибка, функция mail возвращает ноль, что сигнализирует о проблеме. Ненулевое значение свидетельствует об удачном отправлении письма.

Необязательные аргументы

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

Вызвав mail с двумя аргументами, получим предупреждение. Например, сценарий содержащий строку

mail ((“chris@lightwood.net”, “Привет”);

сгенерирует примерно такое предупреждение:

Warning : mail () expects at least 3 parmeters,2 given in /home/chris/mail.php on line 3

А эти примеры mail корректны:

mail(“chris@lightwood.net”,“Привет”, “Это тестовое письмо”); mail(“chris@lightwood.net”,“Привет”, “Это тестовое письмо”, “Cc: editor$samspublishing.com”);

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

Следующий пример является вариацией функции add_tax с двумя аргументами – чистой стоимостью и процентом налога. По умолчанию $rate имеет значение 10 и является необязательным аргументом:

function add_tax_rate($amount, $rate=10){
    $total = $amount * (1+($rate / 100));
    return $total;
}

При использовании этой функции оба приведенных ниже вызова, корректны:

add_tax_rate(16); add_tax_rate(16, 9);

В первом примере используется значение по умолчанию 10%, а во втором задается значение 9%. Этот вариант работает так же, как и первый пример функции add_tax.

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

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

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

Основное правило гласит, что переменные, определенные в главном теле сценария, недоступны внутри функции. Аналогично, внутренние переменные функции не видны в главной части сценария.

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

Когда вызывается функция add_tax, вычисляется значение переменной $total и возвращается как результат. Однако даже после вызова add_tax локальная переменная $total не определена за пределами этой функции.

В примере ниже сделана попытка вывести значение глобальной переменной внутри функции:

function display_value() {
     echo $value;
}
$value = 125;
display_value ();

Этот сценарий не выводит ничего, потому что $value не определено в локальной области.

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

function change_value() {
    global $value;
    echo “До: $value <br>”;
    $value = $value * 2;
}
$value = 100;
echo “После: $value <br>”;

Значение $value теперь изменяется внутри функции, и на выходе получаем следующее:

До: 100
После: 200

Использование библиотечных файлов

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

Перед тем как продолжить, нужно создать библиотечный файл с именем tax.php и поместить туда функции add_tax и add_tax_rate. Другого PHP-кода в нем быть не должно.

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

Подключение библиотечных файлов

Чтобы связать внешний библиотечный файл с другим сценарием, нужно использовать ключевое слово include. В примере ниже подключается файл tax.php, и теперь функцию add_tax можно вызвать из сценария:

include “tax.php”;
$price = 95;
echo “Цена без налога: $price <b>”;
echo “Цена с налогом: $price ”;
echo add_tax($price);

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

require. Инструкции require и require_once очень похожи на include и include_once, но ведут себя по разному. В случае ошибки include выводит сообщение об ошибке, но сценарий продолжает выполняться. При неудаче в операторе require выполнение сценария прекращается.

Резюме

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

Комментарии к статье (0)


<<назад

Погода в Рудне
(Волгоградcкая обл.)

Подробнее >>


Курс валют
на 26 Мая 2017 г.
DKK - 84,7288
USD - 56,0701

MainLink