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

Реализация этой возможности заключается в использовании функций 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 гораздо серьезнее первого. Поскольку программа данного типа выполняется как поток, порожденный сервером, она использует адресное пространство сервера. Следовательно, ошибка
ISAPI-программы может не только вызвать аварийное завершение, но и вывести из строя сервер.

16) Программный интерфейс DB Library

Программный интерфейс DB Library представляет собой естественный интерфейс SQL Server, реализованный как набор функций. В документации Microsoft не рекомендуется применять этот интерфейс, так как вместо него гораздо удобнее пользоваться другими. Фактически в новой версии SQL Server этот интерфейс оставлен только для совместимости с разработанными ранее приложениями.

Программный интерфейс ODBC

Программный интерфейс ODBC создан специально для доступа к реляционным базам данных. Это универсальный интерфейс, доступный не только в SQL Server, но и при работе с другими (в том числе
нереляционными) базами данных. Предполагается, что разработчик базы данных предоставляет в
распоряжение прикладных программистов драйвер ODBC, и все обращения к базе данных выполняются с использованием интерфейса ODBC, предоставляемого этим драйвером. Преимущества организации доступа к базам данных через унифицированный интерфейс ODBC очевидны — программы, обращающиеся к базам данных, становятся менее зависимыми от этих баз данных. Однако на практике отличия в реализации драйверов ODBC не всегда позволяют добиться полной независимости. Программный интерфейс ODBC выполнен как набор функций. Поэтому он непосредственно доступен только из программ, составленных
на традиционных языках программирования, имеющих соответствующую библиотеку функций. Поэтому данный интерфейс можно использовать при взаимодействии сервера Web с базами данных только через расширения CGI и ISAPI.

Объектный интерфейс OLE DB

Другой объектный интерфейс, разработанный для предоставления доступа к базам данных, называется OLE DB. Фактически OLE DB представляет собой открытый стандарт, предназначенный для организации
универсального доступа к базам данных. Причем имеются в виду не только реляционные БД, но и нереляционные такие, как серверы почты, базы данных на мэйнфреймах с методами доступа IMS, VSAM и т. д. Объектный интерфейс OLE DB не реализует механизм автоматизации. Тем не менее интерфейс OLE DB иногда удобнее интерфейса ODBC, особенно в тех случаях, когда сервер Web должен обращаться к нереляционным базам данных. Он рекомендуется как средство для создания системных утилит, работающих с базами данных, а также при создании инструментов для разработки приложений.

Объектный интерфейс ActiveX Data Objects

Объектный интерфейс ActiveX Data Objects (ADO) построен на основе интерфейса OLE DB. Модель ADO представляет собой набор объектов и значительно упрощает разработку приложений с базами данных, так как позволяет использовать высокоуровневые средства разработки и серверные сценарии. Это возможно, в частности, потому, что объекты ADO реализуют средства автоматизации. В результате интерфейс ADO доступен из приложений, составленных с применением целого спектра инструментальных средств таких, как ASP, С++, Visual Basic. Visual Basic for Applications, Java и т. д.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: