- •Лабораторная работа № 2 встроенные и пользовательские функции php. Переменные сервера. Загрузка файлов
- •1. Постановка задачи
- •2. Порядок выполнения работы
- •3. Содержание отчета
- •4. Основные теоретические сведения
- •4.1. Функции, определяемые пользователем
- •4.2. Аргументы функций
- •Списки аргументов переменной длины
- •Статические переменные
- •4.4. Возвращаемые значения
- •4.3. Использование переменных внутри функции Глобальные переменные
- •Возвращение ссылки
- •4.5. Загрузка файла на сервер
- •5. Контрольные вопросы
- •Варианты заданий
- •Все варианты заданий базируются на заданиях предыдущей лабораторной работы и являются их продолжением.
- •6. Список рекомендуемой литературы
4.3. Использование переменных внутри функции Глобальные переменные
Чтобы использовать внутри функции переменные, заданные вне нее, эти переменные нужно объявить как глобальные. Для этого в теле функции следует перечислить их имена после ключевого слова global:
global $var1, $var2;
<?
$a=1;
function Test_g(){
global $a;
$a = $a*2;
echo 'в результате работы функции $a=',$a;
}
echo 'вне функции $a=',$a,', ';
Test_g();
echo "<br>";
echo 'вне функции $a=',$a,', ';
Test_g();
?>
Пример. Глобальные переменные
В результате работы этого скрипта получим:
вне функции $a=1, в результате работы
функции $a=2
вне функции $a=2, в результате работы
функции $a=4
Когда переменная объявляется как глобальная, фактически создается ссылка на глобальную переменную. Поэтому такая запись эквивалентна следующей (массив GLOBALS содержит все переменные, глобальные относительно текущей области видимости):
$var1 = & $GLOBALS["var1"];
$var2 = & $GLOBALS["var2"];
Это значит, например, что удаление переменной $var1 не удаляет глобальной переменной $_GLOBALS["var1"].
Статические переменные
Чтобы использовать переменные только внутри функции, при этом сохраняя их значения и после выхода из функции, нужно объявить эти переменные как статические. Статические переменные видны только внутри функции и не теряют своего значения, если выполнение программы выходит за пределы функции. Объявление таких переменных производится с помощью ключевого слова static:
static $var1, $var2;
Статической переменной может быть присвоено любое значение, но не ссылка.
<?
function Test_s(){
static $a = 1;
// нельзя присваивать выражение или ссылку
$a = $a*2;
echo $a;
}
Test_s(); // выведет 2
echo $a; // ничего не выведет, так как
// $a доступна только
// внутри функции
Test_s(); // внутри функции $a=2, поэтому
// результатом работы функции
// будет число 4
?>
Пример. Использование статической переменной
4.4. Возвращаемые значения
Все функции, приведенные выше в качестве примеров, выполняли какие-либо действия. Кроме подобных действий, любая функция может возвращать как результат своей работы какое-нибудь значение. Это делается с помощью утверждения return. Возвращаемое значение может быть любого типа, включая списки и объекты. Когда интерпретатор встречает команду return в теле функции, он немедленно прекращает ее исполнение и переходит на ту строку, из которой была вызвана функция.
Например, составим функцию, которая возвращает возраст человека. Если человек не умер, то возраст считается относительно текущего года.
<?php
/* если второй параметр вычисляется
как true, то он рассматривается как
дата смерти, */
function Age($birth, $is_dead){
if ($is_dead) return $is_dead-$birth;
else return date("Y")-$birth;
}
echo Age(1971, false); // выведет 33
echo Age(1971, 2001); // выведет 30
?>
В этом пример можно было и не использовать функцию return, а просто заменить ее функцией вывода echo. Однако если мы все же делаем так, что функция возвращает какое-то значение (в данном случае возраст человека), то в программе мы можем присвоить любой переменной значение этой функции:
$my_age = Age(1981, 2004);
В результате работы функции может быть возвращено только одно значение. Несколько значений можно получить, если возвращать список значений (одномерный массив). Допустим, мы хотим получить полный возраст человека с точностью до дня.
<?php
function Full_age($b_day, $b_month, $b_year){
if (date("m")>$b_month && date("d")>$b_day)
{
$day = date ("d") - $b_day;
$month = date("m") - $b_month;
$year = date("Y") - $b_year;
} else {
$year = date("Y") - $b_year - 1;
$day = 31 - ($b_day - date ("d"));
$month = 12 - ($b_month - date("m"));
}
return array ($day,$month,$year);
}
$age = Full_age("07","08","1974");
echo "Вам $age[2] лет, $age[1] месяцев
и $age[0] дней";
// выведет "Вам 29 лет, 11 месяцев и 5 дней"
?>
Когда функция возвращает несколько значений для их обработки в программе, удобно использовать языковую конструкцию list(), которая позволяет одним действием присвоить значения сразу нескольким переменным. Например, в предыдущем примере, оставив без изменения функцию, обработать возвращаемые ей значения можно было так:
<?
// задание функции Full_age()
list($day,$month,$year) = Full_age("07",
"08","1974");
echo "Вам $year лет, $month месяцев и
$day дней";
?>
Вообще конструкцию list() можно использовать для присвоения переменным значений элементов любого массива.
<?
$arr = array("first","second");
list($a,$b) = $arr;
// переменной $a присваивается первое
// значение массива, $b – второе
echo $a," ",$b;
// выведет строку «first second»
?>
Пример. Использование list()
