Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вся инфа.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
44.52 Кб
Скачать

13) Php функции.

особенности пользовательских функций в PHP:

-Доступны параметры по умолчанию. Есть возможность вызывать одну и ту же функцию с переменным числом параметров;

-Пользовательские функции могут возвращать любой тип;

-Область видимости переменных внутри функции является иерархической (древовидной);

-Есть возможность изменять переменные, переданные в качестве аргумента.

Объявление:

function Имя (аргумент1[=значение1],...,аргумент1[=значение1])

{

тело_функции

}

Внутри функции все переменные локальны.

По умолчанию аргументы в функцию передаются по значению. По ссылке передают так : ставят амперсанд (&) перед именем аргумента в описании функции.

Переменное число аргументов в функциях

Реализация этой возможности заключается в использовании функций func_num_args(), func_get_arg() и func_get_args().

Не существует локальных функций, функция внутри другой функции видна всей программе.

Функции-переменные.

- динамические вызовы функций, имена которых определяются во время выполнения программы. Вызов функции-переменной представляет собой имя переменной, за которым следует пара круглых скобок. В круглых скобках могут перечисляться параметры (однако присутствие параметров не обязательно). Обобщенный синтаксис функции-переменной: $имя_функции( );

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

Одномерные индексируемые массивы

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

Обобщенный синтаксис элементов одномерного массива:

-$имя[индекс1 ];

Одномерные массивы создаются следующим образом:

-$meat[0] = "chicken";

-$meat[1] = "steak";

-$meat[2] = "turkey";

При выполнении следующей команды:

-print $meat[l];

В браузере выводится строка steak.

При создании массивов также можно воспользоваться функцией array(). Массив $meat из предыдущего примера создается командой Smeat = array("chicken", "steak", "turkey");

Приведенная выше команда print приводит к тому же результату - выводу строки steak. Чтобы включить новый элемент в конец массива, можно просто присвоить значение переменной массива без указания индекса.

Следовательно, массив Smeat можно создать еще одним способом:

$meat[] - "chicken"

$meat[] - "steak"

$meat[] - "turkey"

Одномерные ассоциативные массивы

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

блюд. Проще всего было бы хранить в массиве пары «ключ/значение» — например, присвоить сорт вина названию блюда. Самым разумным решением оудет использование ассоциативного массива:

$pairings["2infandel"] = "Broiled Veal Chops";

Spainngs["merlot"] = "Baked Ham";

Spairings["sauvignon"] = "Prime Rib";

Spairings["sauternes"] = "Roasted Salmon";

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

«Мерло». Нужная информация выводится простой ссылкой на элемент массива Spairings:

print $pairings["merlot"]: // Выводится строка "Baked Ham"

Ассоциативные массивы также можно создавать функцией РНР array():

Spairings - array(

zinfandel => "Broiled Veal Chops",

merlot => "Baked Ham",

sauvignon => "Prime Rib"

sauternes => "Roasted Salmon");

Отличается только способ создания массива pairings, а функциональные возможности остаются без изменений.

Многомерные индексируемые массивы

Многомерные индексируемые массивы работают практически так же, как и их одномерные прототипы, однако элементы в них определяются несколькими индексами вместо одного. Теоретически размерность индексируемого массива не ограничивается, хотя в большинстве приложений практически не встречаются массивы с размерностью выше 3. Обобщенный синтаксис элементов многомерного массива:

$имя[индекс1 ][индекс2].. [индекс N]:

Пример ссылки на элемент двухмерного индексируемого массива:

$position = $chess_board[5][4];

Многомерные ассоциативные массивы

Многомерные ассоциативные массивы также существуют в РНР (и приносят определенную пользу). Допустим, в массиве $pairings из предыдущего примера должна храниться информация не только о сорте,

но и о производителе вина. Это можно сделать следующим образом:

$pairings["Martinelli"]["zinfandel"] = "Broiled Veal Chops"

$pairings["Beringer"]["merlot"] = "Baked Ham"

$pairings["Jarvis"]["sauvignon"] = "Prime Rib";

$pairings["Climens"]["sauternes"] = "Roasted Salmon";

Конструкция foreach представляет собой разновидность for, включенную в язык для упрощения перебора элементов массива. Существуют две разновидности оператора foreach, предназначенные для разных типов массивов:

foreach (массив as $элемент) {

блок

}

foreach (массив as $ключ => $элемент) {

блок

}

Предопределённые массивы.

$GLOBALS Содержит ссылку на каждую переменную, доступную в данный момент в глобальной области видимости скрипта. Ключами этого массива являются имена глобальны переменных. $GLOBALS существует, начиная с PHP 3.

$_SERVER Переменные, установленные web-сервером либо напрямую связанные с окружением выполнения текущего скрипта. Аналог старого массива $HTTP_SERVER_VARS (который по-прежнему доступен, но не рекомендуется).

$_GET Переменные, передаваемые скрипту через HTTP GET. Аналог старого массива $HTTP_GET_VARS (который по-прежнему доступен, но не рекомендуется).

$_POST Переменные, передаваемые скрипту через HTTP POST. Аналог старого массива $HTTP_POST_VARS (который по-прежнему доступен, но не рекомендуется).

$_COOKIE Переменные, передаваемые скрипту через HTTP cookies. Аналог старого массива $HTTP_COOKIE_VARS (который по-прежнему доступен, но не рекомендуется).

$_FILES Переменные, передаваемые скрипту через HTTP post-загрузку файлов. Аналог старого массива$HTTP_POST_FILES (который по-прежнему доступен, но не рекомендуется). Для дополнительной информации смотрите Загрузка методом POST.

$_ENV Переменные, передаваемые скрипту через окружение. Аналог старого массива $HTTP_ENV_VARS (который по-прежнему доступен, но не рекомендуется).

$_REQUEST Переменные, передаваемые скрипту через механизмы ввода GET, POST и COOKIE, и которым, следовательно, нельзя доверять. Наличие и порядок включения переменных в этот массив определяется в соответствии с директивой конфигурации PHP variables_order. Этот массив не имеет прямых аналогов в версиях PHP до 4.1.0. Смотрите также import_request_variables().

$_SESSION Переменные, зарегистрированные на данный момент в сессии скрипта. Аналог старого массива $HTTP_SESSION_VARS (который по-прежнему доступен, но не рекомендуется). Дополнительную информацию смотрите в разделе Функции обработки сессии.

15) ISAPI фильтры и расширения.

ISAPI состоит из двух компонентов: расширение и фильтры.

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

1)ISAPI расширение правильные приложений, запускаемые на IIS. Они имеют доступ ко всем функциональным возможностям, предоставляемым IIS. ISAPI расширения реализованы в виде библиотеки DLL, которые загружаются в процесс, который контролируется IIS. Расширения используют функционал сервера и реализуют обычные веб-страницы.

2) ISAPI фильтры используются для изменения или расширения функциональности, предоставляемой по IIS. Они запускаются не по запросу конкретной страницы, а всегда при работе сервера. Фильтры могут изменять входящие и исходящие потоки данных

Фильтры реализованы в виде файлов DLL и может быть зарегистрирован на IIS и они применимы ко всем сайтам на сервере IIS.

Например задачи фильтров:

- изменения запросов (URL или заголовков), передаваемых клиентом;

- формирование статистики доступа;

- реализация простейшей аутентификации;

- реализация сжатия или шифрования ;

Основное отличие ISAPI-программы от CGI-сценария состоит в том, что ISAPI-программа представляет собой не исполняемый файл, а

динамическую библиотеку (DLL). Благодаря этому появилась возможность запускать программу не как отдельный процесс, а как поток,

принадлежащий Web-серверу. Для выполнения потока требуется значительно меньше ресурсов, чем для работы независимого процесса. Поток использует адресное пространство породившего его процесса и работает намного быстрее, чем отдельный процесс.

Если за универсальность CGI-сценариев пришлось платить недостаточной производительностью, то в качестве платы за высокую производительность разработчики ISAPI-программ жертвуют универсальностью. Арсенал языков, имеющихся в распоряжении разработчиков ISAPI-программ. значительно беднее, чем у их коллег, создающих CGI-сценарии. По сути, тому, кто хочет быстро написать достаточно большую ISAPI-программу. не остается иного выбора, кроме С++.

Второй недостаток ISAPI гораздо серьезнее первого. Поскольку программа данного типа выполняется как поток, порожденный сервером, она использует адресное пространство сервера. Следовательно, ошибка