Операторы require_once и include_once
Работают операторы require_once и include_once точно так же, как require и include. Однако перед включением файла интерпретатор проверяет, вклю- чался ли уже этот файл или нет. Если файл был подключен ранее, то он не будет подключен. Операторы имеют следующий формат:
require_once(<Имя файла>); require_once <Имя файла>; include_once(<Имя файла>); include_once <Имя файла>; Например: require_once("script.inc");
$var1 = 5;
$var2 = f_Sum($var1); echo $var2; include_once("footer.inc");
Применять операторы require_once и include_once удобно при разработке больших проектов, так как в одном из файлов включаемый файл, возможно, уже был подключен. Подключение одного файла дважды может привести к ошибкам, которые очень трудно найти.
5.18.5. Рекурсия. Вычисляем факториал
Рекурсия — это возможность функции вызывать саму себя. С одной стороны, это удобно, с другой стороны, если не предусмотреть условие выхода, это приводит к бесконечным циклам.
Для примера приведем вычисление факториала (листинг 5.23).
Листинг 5.23. Вычисление факториала
<b>Вычисление факториала</b><br><br>
Введите число<br>
<form action="<?php echo $_SERVER[‘SCRIPT_NAME’]; ?>">
<input type="text" name="fact">
<input type="submit" value="OK">
</form><br>
<?php
function f_Factorial($x) {
if ($x == 0 || $x == 1) return 1;
else return ($x * f_Factorial($x - 1));
}
if (isset($_GET[‘fact’])) {
$fact = $_GET[‘fact’];
if (!preg_match(‘/^[0-9]+$/s’, $fact)) {
echo ‘Необходимо ввести целое число!’;
}
else {
echo ‘Факториал числа ‘ . $fact . ‘ = ‘ . f_Factorial((int)$fact);
}
}
?>
5.18.6. Глобальные и локальные переменные. Передача параметров по ссылке. Использование глобальных переменных внутри функций
Глобальные переменные — это переменные, объявленные вне функции. В PHP
глобальные переменные видны в любой части программы, кроме функций.
Локальные переменные — это переменные, объявленные внутри функции. Локальные переменные видны только внутри тела функции. Если имя ло- кальной переменной совпадает с именем глобальной переменной, то все операции внутри функции осуществляются с локальной переменной, а значение глобальной не изменяется.
Листинг 5.24 демонстрирует область видимости переменных.
Листинг 5.24. Глобальные и локальные переменные
<?php
function f_Sum() {
$var1 = 5;
$number = 1;
echo ‘Локальная переменная $var1 = ‘ . $var1 . ‘<br>’;
echo ‘Локальная переменная $number = ‘ . $number . ‘<br>’; echo ‘Глобальная переменная $var2 = ‘ . gettype($var2); echo ‘, т. е. не видна внутри функции<br>’;
return ($var1 + $number);
}
$var1 = 10;
echo ‘Глобальная переменная $var1 = ‘ . $var1 . ‘<br>’;
$var2 = 7;
$var3 = f_Sum(); // Вызов функции
echo ‘Глобальная переменная $var1 осталась = ‘ . $var1 . ‘<br>’;
echo ‘Локальная переменная $number = ‘ . gettype($number);
echo ‘, т. е. не видна вне тела функции’;
?>
В окне Web-браузера получим следующий результат:
Глобальная переменная $var1 = 10
Локальная переменная $var1 = 5
Локальная переменная $number = 1
Notice: Undefined variable: var2 in C:\Apache2\htdocs\test.php on line 7
Глобальная переменная $var2 = NULL, т. е. не видна внутри функции
Глобальная переменная $var1 осталась = 10
Notice: Undefined variable: number in C:\Apache2\htdocs\
test.php on line 16
Локальная переменная $number = NULL, т. е. не видна вне тела функции
Как видно из примера, переменная $number, объявленная внутри функции f_Sum(), не доступна вне функции. Объявление внутри функции локальной переменной $var1 не изменило значения одноименной глобальной перемен- ной. А глобальная переменная $var2 не видна внутри функции f_Sum().
О БРАТИТЕ ВНИМ АНИЕ
Две строки в результатах вывода начинаются со слова "Notice". Таким об-
разом интерпретатор предупреждает нас о неопределенной переменной.
Для того чтобы глобальная переменная была видна внутри функции, необхо- димо перед именем переменной внутри функции указать ключевое слово global. Продемонстрируем это на примере (листинг 5.25).
Листинг 5.25. Использование глобальных переменных внутри функции
<?php
function f_Sum() {
global $var1;
$number = 2;
echo ‘Глобальная переменная $var1 внутри функции = ‘;
echo $var1 . ‘<br>’;
$var1 += $number;
}
$var1 = 10;
echo ‘Глобальная переменная $var1 вне функции = ‘ . $var1 . ‘<br>’;
f_Sum(); // Вызов функции
echo ‘Значение переменной $var1 после функции = ‘ . $var1 . ‘<br>’;
?>
В окне Web-браузера получим следующий результат:
Глобальная переменная $var1 вне функции = 10
Глобальная переменная $var1 внутри функции = 10
Значение переменной $var1 после функции = 12
Кроме того, можно передать глобальную переменную в функцию по ссылке (листинг 5.26). В этом случае создается переменная, которая не имеет собст- венного значения, а содержит ссылку на исходную переменную. Любые из- менения, применяемые к ссылке, влияют и на глобальную переменную. При передаче по ссылке перед именем переменной в определении функции ука- зывается знак &.
Листинг 5.26. Передача глобальной переменной в функцию по ссылке
<?php
function f_Sum(&$var1) {
$number = 2;
echo ‘Глобальная переменная $var1 внутри функции = ‘;
echo $var1 . ‘<br>’;
$var1 += $number;
}
$var1 = 10;
echo ‘Глобальная переменная $var1 вне функции = ‘ . $var1 . ‘<br>’;
f_Sum($var1); // Вызов функции
echo ‘Значение переменной $var1 после функции = ‘ . $var1 . ‘<br>’;
?>
В итоге, в окне Web-браузера получим такой же результат:
Глобальная переменная $var1 вне функции = 10
Глобальная переменная $var1 внутри функции = 10
Значение переменной $var1 после функции = 12
Внутри функции к глобальной переменной можно обратиться через супер-
глобальный массив $GLOBALS (листинг 5.27).
Листинг 5.27. Использование суперглобального массива $GLOBALS
<?php
function f_Sum() {
$number = 2;
echo ‘Глобальная переменная $var1 внутри функции = ‘;
echo $GLOBALS[‘var1’] . ‘<br>’;
$GLOBALS[‘var1’] += $number;
}
$var1 = 10;
echo ‘Глобальная переменная $var1 вне функции = ‘ . $var1 . ‘<br>’;
f_Sum();
echo ‘Значение переменной $var1 после функции = ‘ . $var1 . ‘<br>’;
?>
В итоге, в окне Web-браузера получим такой же результат:
Глобальная переменная $var1 вне функции = 10
Глобальная переменная $var1 внутри функции = 10
Значение переменной $var1 после функции = 12
Если создать новый элемент в массиве $GLOBALS, то автоматически будет создана глобальная переменная с таким же названием:
if (!isset($var1)) echo ‘Переменная $var1 не определена<br>’;
$GLOBALS[‘var1’] = 10;
echo ‘Значение переменной $var1 = ‘ . $var1;
В итоге, в окне Web-браузера получим результат:
Переменная $var1 не определена
Значение переменной $var1 = 10
5.18.7. Статические переменные
Если внутри функции объявлена статическая переменная, то после заверше- ния работы функции она не будет удалена и сохранит свое значение. Объяв- ляется статическая переменная с помощью ключевого слова static, которое указывается перед именем переменной.
Выведем все четные числа от 1 до 100 (листинг 5.28).
Листинг 5.28. Использование статических переменных
<?php
function f_Sum() {
static $var;
$number = 2;
$var += $number;
echo $var . "<br>\n";
}
for ($i=0; $i<50; $i++) f_Sum();
?>
5.18.8. Переменное число параметров в функции.
Сумма произвольного количества чисел
Функции func_get_args() и func_get_arg() позволяют получить доступ ко всем параметрам, переданным функции (листинг 5.29). Функция func_num_args() позволяет определить общее количество параметров, переданных функции.
Листинг 5.29. Использование функции func_get_arg()
<?php
function f_Sum($var1, $var2) {
return func_get_arg(0)+func_get_arg(1);
}
echo f_Sum(5, 6); // Выведет: 11
?>
Какой в этом смысл? Дело в том, что при использовании этих функций мож- но передать нашей функции больше аргументов, чем первоначально объяв- лено. Можно, например, просуммировать сразу несколько чисел, а не только два (листинг 5.30).
Листинг 5.30. Переменное число параметров в функции
<?php
function f_Sum($var1, $var2) {
$sum = 0;
$count = func_num_args();
for ($i=0; $i<$count; $i++) {
$sum += func_get_arg($i);
}
return $sum;
}
echo f_Sum(5, 6, 7, 20); // Выведет 38
?>
Такой же результат можно получить, используя функцию func_get_args()
(листинг 5.31).
Листинг 5.31. Использование функции func_get_args()
<?php
function f_Sum($var1, $var2) {
$sum = 0;
foreach (func_get_args() as $val) {
$sum += $val;
}
return $sum;
}
echo f_Sum(5, 6, 7, 20); // Выведет 38
?>
Источник: Прохоренок Н. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2010. — 912 с.: ил. + Видеокурс (на CD-ROM) — (Профессиональное программирование)
Похожие посты:
- Что такое селекторы и как их правильно использовать (0)
- Конфигурация URL и слабая связанность (0)
- Углубленное изучение представлений и конфигурации URL (0)
- Аргументы представления, принимаемые по умолчанию Django (0)
- Обработка сохраняемых фрагментов текста Django (0)
- Высокоуровневые абстракции функций представления (0)
- Автоматическое экранирование HTML Django (0)