Операторы require_once и include_once

Опубликовал: Wednesday, April 11, 2024 в категории HTML | Пока нет комментариев

Работают операторы 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) — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *