Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПвИ / Конспект лекций.doc
Скачиваний:
224
Добавлен:
01.06.2015
Размер:
1.05 Mб
Скачать

Аргументы функции

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

<?php

function addFive($num)

{

$num +=5;

}

$orig = 10;

addFive( $orig );

print $orig; // выводится 10 !!!

?>

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

<?php

function addFive($num)

{

$num +=5;

}

$orig = 10;

addFive( &$orig ); // передача аргумента по ссылке при вызове функции

print $orig; // выводится 15 !!!

?>

или (предпочтительно !)

<?php

function addFive( &$num ) // передача аргумента по ссылке

{

$num +=5;

}

$orig = 10;

addFive( $orig );

print $orig; // выводится 10 !!!

?>

Аргументы по умолчанию

Некоторые из аргументов функции можно сделать необязательными, уменьшив, таким образом, требовательность функции. Начиная с версии PHP 4 можно использовать значения аргументов, подставляемые по умолчанию. Делается это следующим образом:

function make_coffee( $type = “кофе с молоком” )

{

print “Сделайте чашечку $type. \n”;

}

make_coffee();

make_coffee(“капучино”);

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

function make_yogurt( $flavour, $type = “йогурт” )

{

print “Заказан $flavour $type”;

}

make_yogurt(“черничный”); // результат – Заказан черничный йогурт

Область видимости переменных

Область видимости переменных представляет собой контекст, в рамках которого действительно ее определение. В большинстве случаев переменные РНР имеют одну область видимости. Кстати, это понятие распространяется на включаемые с помощью include файлы. Например:

$а = 1;

include "b.inc";

Здесь переменная $а доступна (видна) программному коду внутри файла b.inc. Однако внутри любой функции автоматически активизируется локальная область видимости: любая переменная, определенная внутри функции, ограничена ее пределами. Например:

$а = 1; // глобальная область видимости

Function Test () {

echo $a; /* ссылка на локальную (!) переменную */

}

Test ();

Функция еcho пытается использовать значение локальной переменной $a, которая не получила еще никакого значения. Это важное отличие РНР от Си и Perl, где по умолчанию используется глобальное определение переменных!

В РНР необходимо явно объявлять переменные глобальными внутри функций для использования внешних переменных. Например:

$а = 1; $b = 2;

Function Sum(){

global $а, $b;

$b = $а + $b;

}

Sum ();

echo $b;

Объявление переменных $а и $b внутри функции глобальными раз и навсегда переводит все ссылки на эти переменные в область видимости, внешнюю по отношению к этой функции. Никаких ограничений на количество глобальных переменных, определяемых таким образом, не накладывается.

Переменные с глобальной областью видимости могут быть считаны или установлены с помощью специального массива $GLOBALS. С его помощью мы можем переписать предыдущий пример вот так:

$а = 1;

$b = 2;

Function Sum ()

{

$GLOBALS [“b”] = $GLOBALS [“a”] + $GLOBALS [“b”];

}

Sum ();

echo $b;

Массив $GLOBAIS представляет собой ассоциативный массив, в котором ключом является имя глобальной переменной, а содержимое этой переменной — значением элемента массива.

Следующий важный момент в работе механизма области видимости является понятие статической переменной. Статическая переменная существует только в пределах видимости локальной функции, однако не прекращает своего существования, когда выполнение функции завершается. Допустим, необходимо подсчитать число вызовов функции Test().Обратимся к примеру:

Function Test () {

$а = 0;

echo $a:

$а++;

}

Как и следует ожидать, это определение функции совершенно бесполезно. Каждый ее вызов завершается одинаково: она выводит на экран 0, поскольку переменная $a всегда получает значение равное 0. Эта переменная создается при входе в функцию и уничтожается при ее завершении, поэтому инкрементирование переменной заканчивается ничем: она уничтожается, а при очередном вызове функции создается заново. Чтобы реализовать подсчет количества вызовов функции Test() , можно либо использовать глобальную переменную, либо объявить переменную $а как статическую:

Function Test (){

static $a = 0;

echo $a;

$a++;

}

Теперь переменная инкрементируется при каждом обращении к функции Test().

Лекция 7. Одно из наиболее значительных улучшений в ASP.NET заключается в способе работы с исходным текстом в среде исполнения (runtime). Модели разработки ASP и ASP.NET похожи, но скрытые механизмы этих технологий сильно отличаются. В ASP.NET вместо интерпретации исходной страницы при каждом обращении клиента страница компилируется, преобразуясь в формат промежуточного языка MSIL (Microsoft Intermediate Language) лишь при первом обращении. После компиляции страницы в MSIL JIT-компилятор (Just In Time compiler) преобразует MSIL в машинный код.

Примечание. Можно не ожидать первого запроса страниц ASP.NET, а сразу принудительно скомпилировать все страницы в формат MSIL – это позволяет выявить синтаксические и другие ошибки.

Соседние файлы в папке ПвИ