Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vtoraya_chast_uchebnika_po_WWW_Okonchat_variant...doc
Скачиваний:
31
Добавлен:
27.09.2019
Размер:
6.06 Mб
Скачать

4.6. Дополнительные возможности работы с функциями в php

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

4.6.1 Переменные, ссылающиеся на функции

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

Пример 4‑19

<body>

<H1>

Пример использования переменной, ссылающейся на функцию

</H1>

<?php

$func_peremen1 = "pokupka";

$func_peremen2 = "oplata";

$func_peremen3 = "remont";

function pokupka($chto_to)

{

echo "В этом хозяйственном магазине много ",$chto_to, "<br>";

echo " и мы его купим. <br><br>";

}

function oplata($massa,$summa)

{

echo "За ", $massa, " кг цемента <br>";

echo "мы заплатили ", $summa, " рублей. <br><br>";

}

function remont($argument)

{

echo "$argument <br>" ;

}

$func_peremen1("цемента");

$func_peremen2(50,400);

$func_peremen3("Мы начали ремонт");

$func_peremen3("Мы продолжаем ремонт");

$func_peremen3("Мы закончили ремонт");

?>

</body>

4.6.2. Условное (динамическое) описание функций

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

Ниже приведенный пример демонстрирует особенности применения условного описания функции. Рассмотрим его подробнее. В нём рассмотрены три варианта. Они содержат ответы на следующие вопросы:

  1. Как использовать условный оператор if для условного описания функции?

  2. Можно ли вызывать неописанную функцию?

  3. Можно ли описывать функцию дважды?

В этом примере необходимо разобраться самостоятельно и выполнить его практически.

Пример 4‑20

<body>

<h2> Результат использования условного описания функции </h2>

<?php

function func_obichn()

{

echo "Сработала func_obichn(), доступная сразу после запуска скрипта.<br><br>";

}

func_obichn(); //Вызов обычным образом описанной функции

//Переход к условному описанию функции

//------- Задание условия для реализации варианта сценария

$var = 1; /* Функция func1_uslopis()условно определяется один раз

и один раз вызывается на выполнение */

//$var = 2; /* Функция func2_uslopis()условно определяется и вызывается один раз

После этого проводится вызов неописанной ранее функции */ *func1_uslopis().

//$var = 3; // Сначала условно описывается и срабатывает по вызову функция func3_uslopis().

/* Затем делается попытка вторичного описания той же функции,

которая должна окончится неудачей ! */

//----------------------------------------------------------------------------------------------

switch ($var)

{

case 1:

if ($var=1) /* ---Начало оператора if с первым условным описанием функции --- */

{

echo "Прошёл вход в тело оператора if <br>";

echo "с первым условным описание функции func1_uslopis(0).<br><br>";

//------- Начало условного описания функции -------

function func1_uslopis()//Первое условное описание функции func1_uslopis(0).

// (1 вариант) Она будет печатать нижеприведённый текст

{

echo "Данный фрагмент печати - результат работы func1_uslopis(),<br>";

echo "определенной в первый раз для 1-го варианта сценария.<br>";

}

//-----Конец условного описания функции func1_uslopis()-----

}

/* --Начало проверки работы условно описанной функции - её вызов --*/

func1_uslopis();

break;

case 2:

if ($var=2) /* --- Начало оператора if с

первым условным описанием функции func2_uslopis()

для 2-го варианта---*/

{

echo "Прошёл вход в тело оператора if для 2-го варианта<br>";

echo "с первым условным описание функции func2_uslopis(0).<br><br>";

/*----- Начало условного описания функции func2_uslopis() ---- */

function func2_uslopis() //Первое условное описание функции func2_uslopis(). //Она будет печатать нижеприведённый текст

{

echo "Данный фрагмент печати - результат работы func2_uslopis(),<br>";

echo "определенной в первый раз для 2-го варианта сценария.<br>";

echo "Далее вызывается функция func1_uslopis().<br>";

echo "Так как она в этом варианте не определяется,<br>";

echo "система сообщит о невозможности этого - смотри ниже!!!<br><br>";

}

/*-------- Конец условного описания функции --------- */

/*--Начало проверки работы условно описанной функции - её вызов --*/

}

func2_uslopis();

func1_uslopis();

break;

case 3:

if ($var=3) /*--- Начало оператора if с первым условным

описанием функции func3_uslopis() --- */

{

echo "Прошёл вход в тело оператора if для 3-го варианта<br>";

echo "с первым условным описание функции func3_uslopis(0).<br><br>";

/*------ Начало условного описания функции func2_uslopis() ------ */

function func3_uslopis() //Первое условное описание функции func3_uslopis(). //Она будет печатать нижеприведённый текст

{

echo "Данный фрагмент печати - результат работы func3_uslopis(),<br>";

echo "определенной в первый раз для 3-го варианта сценария.<br>";

echo "Далее будет сделана попытка вторичного определения<br>";

echo "той же функции. Так как это недопустимо,<br>";

echo "система должна сообщить о невозможности этого.<br><br>";

}

}

func3_uslopis();//вызов единожды описанной func3_uslopis()

if ($var=3) /*--- Начало оператора if со вторым условным описанием функции func3_uslopis()--- */

{

echo "Прошёл вход в тело оператора if для 3-го варианта <br>";

echo "со вторым условным описание функции func3_uslopis(0)<br>";

echo "система сообщает о невозможности этого - смотри ниже!!!<br><br>";

//----- Начало второго условного описания функции ------func3_uslopis()-------

function func3_uslopis() //Первое условное описание функции func3_uslopis(). //Она будет печатать нижеприведённый текст

{

echo "A и B сидели на трубе.<br>";

}

}

break;

}

?>

</body>