Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы(ИТ).doc
Скачиваний:
8
Добавлен:
23.11.2019
Размер:
349 Кб
Скачать
☆

№36 Функции, определяемые пользователем

Приведем пример синтаксиса, используемого для описания функций:

Пример #1 Псевдокод для демонстрации использования функций

<?php

function foo($arg_1, $arg_2, /* ..., */ $arg_n)

{

echo "Example function.\n";

return $retval;

}

?>

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

Имена функций следуют тем же правилам, что и другие метки в PHP. Корректное имя функции начинается с буквы или знака подчеркивания, за которым следует любое количество букв, цифр или знаков подчеркивания. В качестве регулярного выражения оно может быть выражено так: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

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

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

Пример #2 Функции, зависящие от условий

<?php

$makefoo = true;

/* Мы не можем вызвать функцию foo() в этом месте,

поскольку она еще не определена, но мы можем

обратиться к bar() */

bar();

if ($makefoo) {

function foo()

{

echo "Я не существую до тех пор, пока выполнение программы меня не достигнет.\n";

}

}

/* Теперь мы благополучно можем вызывать foo(),

поскольку $makefoo была интерпретирована как true */

if ($makefoo) foo();

function bar()

{

echo "Я существую сразу с начала старта программы.\n";

}

?>

Пример #3 Вложенные функции

<?php

function foo()

{

function bar()

{

echo "Я не существую пока не будет вызвана foo().\n";

}

}

/* Мы пока не можем обратиться к bar(),

поскольку она еще не определена. */

foo();

/* Теперь мы можем вызвать функцию bar(),

обработка foo() сделала ее доступной. */

bar();

?>

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

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

Замечание: Имена функций регистронезависимы, тем не менее, более предпочтительно вызывать функции так, как они были объявлены.

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

Можно также вызывать функции PHP рекурсивно. Однако, пытайтесь избегать вызовов рекурсивных функций/методов с более чем 100-200 уровней рекурсии, так как это сильно бьет по стэку и может вызвать крах выполняемого скрипта.

Пример #4 Рекурсивные функции

<?php

function recursion($a)

{

if ($a < 20) {

echo "$a\n";

recursion($a + 1);

}

}

?>

№37 Динамические переменные и функции в php

Динамической переменной считается та, имя которой хранится в самой переменной. Это так называемая "переменная переменная".

Например:

$var = "first";

$$var = "Second";

# $$var == $first == "Second"

$$var - динамическая, ее имя может меняться вместе с изменением $var.

Также, можно связать имя переменной с содержимым другой переменной неявно:

$first = "second";

$second = "third";

print $first; // prints "second"

print $$first; // prints "third"

Динамические функции

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

Пример 5

<html>

<head>

<title>Переменные функции</title>

</head>

<body>

<?php

function funct1 ()

{

echo "Мы внутри функции funct1( );<br>";

}

function funct2 ()

{

echo "Мы внутри функции funct2( );<br>";

}

$myfunct = "funct1";

$myfunct();

$myfunct = "funct2";

$myfunct();

?>

</body>

</html>