Самоучитель по SQL-сервер в Linux



Переменные и объекты LXP

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

В LXP также реализована особая разновидность структуры данных, называемая объектом. Объект LXP обычно используется для логического объединения нескольких взаимосвязанных переменных под общим именем. Конкретная переменная, к которой вы обращаетесь в объекте LXP, определяется либо уточняющим числовым или текстовым индексом в квадратных скобках (например, ехапр1е[0]), либо именем переменной через точку (например, for.count).

Концепция объектов LXP напоминает программные концепции массивов и объектов в традиционных языках программирования, хотя объекты LXP устроены гораздо проще. В сущности, различия между переменными и объектами сводятся к простому синтаксису ссылок на значения. Ссылка на переменную представляет собой простое имя (например, my_value), а ссылка на объект состоит из имени и уточнения (например, my_va1ue[0], my_value[l] или my_value.s1ze).

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

Правила формирования имен

Имена переменных LXP состоят из следующих символов:

  • буквы латинского алфавита (a-z, A-Z);
  • цифры (0-9);
  • символ подчеркивания (_).

Полные имена объектов LXP состоят из следующих символов:

  • буквы латинского алфавита (a-z, A-Z);
  • цифры (0-9);
  • символ подчеркивания (_);
  • точка (.);
  • квадратные скобки ([ ]).

Хотя для индексации больше характерны числа — поскольку они используются и массивах CGI (см. подраздел «Массивы CGI» в этом разделе), в квадратных скобках за именем объекта могут следовать любые допустимые символы (например, pseudo_array [example]).

В процессе лексического разбора атрибутов тега LXP некоторые специальные символы интерпретируются как признак подстановки значения переменной прямо в имя или значение атрибута (дополнительная информация приведена в разделе «Лексический разбор тегов»). К числу этих символов относится знак $ для переменных и знак @ для объектов.

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

Использование переменных и объектов

Значение переменной можно вывести в любой точке блока LXP при помощи тега <putvar>. Синтаксис тега <putvar> (переменная — имя переменной, значение которой требуется вывести):

<putvar name="переменная" />

Теги <setvar> и <setvars> присваивают значения переменным. Синтаксис:

<setvar переменндя="значение" />

<setvars переменная1="значение!"

переменная2="значение2"

[...]

/>

Теги <putvar> и <setvar> позволяют выводить и присваивать значения не только переменным, но и объектам.

ПРИМЕЧАНИЕ

Помните, что точка (.) и квадратные скобки ([ ]) в теге <setvar> означают, что значение присваивается не простой переменной, а объекту. Таким образом, при последующей подстановке этого значения вместо знака $ должен использоваться знак @.

Аргументы CGI

LXP, как и многие языки web-программирования, ведет внутренний список переданных аргументов CGI. В LXP эти аргументы косвенно интерпретируются как переменные.

ПРИМЕЧАНИЕ

В контексте этой главы термины «аргумент» и «переменная» практически эквивалентны. Ниже термин «аргумент» обычно употребляется по отношению к переменным, переданным формой, а термин «переменная» — по отношению к переменным в памяти (либо переданным формой, либо заданным разработчиком).

Аргументы передаются формами с именем и значением. Для каждого аргумента, переданного документу LXP (например, через форму HTML), создается переменная, имя которой совпадает с именем аргумента.

При передаче двух одноименных аргументов используется последнее значение, переданное форме (кроме массивов — см. подраздел «Массивы CGI»).

Массивы CGI

Объекты часто используются при работе с массивами CGI. Обычно при передаче документу LXP нескольких аргументов с одинаковыми именами используется последний аргумент, а предыдущие значения игнорируются. Но если имя передаваемого аргумента CGI завершается парой квадратных скобок (например, <select name="test[] ">), то в объект LXP автоматически включается массив значений, присвоенных имени перед квадратными скобками.

Иначе говоря, любой переданный формой CGI аргумент, имя которого заканчивается квадратными скобками (например, test[]), автоматически интерпретируется LXP как массив. Когда такой аргумент передается LXP формой, все присвоенные ему значения автоматически накапливаются в отдельной переменной и различаются по значениям числовых индексов, указываемых в квадратных скобках за именем объекта.

Например, если форма HTML передает аргумент с именем test[], которому присваиваются три значения, в объекте test создается массив из трех элементов. Они обозначаются соответственно test[0], test[l] и test[2].

Объекты непосредственных запросов SQL

При непосредственном выполнении запросов SQL на поля итогового набора можно ссылаться при помощи специального объекта thi s. Ссылки имеют вид thi s. поле, где поле — имя поля.

Также создается объект sql с метаданными, описывающими итоговый набор, — номером текущей записи в наборе (sql. row), смещением текущей записи (sql. offset), количеством записей, выбранных при последнем запросе SQL (sql .numrows), и количеством полей в последнем запросе SQL (sql . numcols или sql .numfields).

Глобальные объекты LXP

Два специальных объекта, 1хр и env, являются системными объектами и содержат информацию о LXP и переменных среды.

К любой переменной среды, заданной в конфигурации CGI Apache (например, REMOTE_ADDR), можно обратиться в формате env .переменная. Например, значение переменной env.REMOTE_ADDR определяет адрес удаленного клиента, обращающегося к текущему документу (если эта возможность была включена в Apache).

Объект 1 хр зарезервирован для системных целей. В версии 0.8 он содержит только три переменные, из которых самой полезной является Ixp.value — путь URI, полученный сервером для текущего запроса LXP (например, /app/index.lxp).

Кроме того, в переменной 1 хр. versi on хранится версия используемого программного пакета LXP, а в переменной Ixp. copy right — информация об авторских правах.

Пользователи, передающие данные документу LXP, не могут передавать переменные с префиксом 1хр. в операциях GET и POST. Таким образом, любая переменная, начинающаяся с префикса 1хр., является защищенной и может использовать-

ся только в документах LXP и только с тегом <setvar>. Данное свойство помогает защитить конфиденциальную информацию, например результаты парольной аутентификации.