Информационные технологииStfw.Ru 🔍

Переменные

Синтаксис языка и операторы
🕛 01.11.2006, 12:53
Переменные помечаются знаком доллара, за которым следует имя переменной (как в Perl). Имена переменных чувствительны к регистру (например, $а и $А - разные переменные); первым символом имени должна быть буква или знак подчеркивания «_», за которым следует любая комбинация буквенно-цифровых символов и/или «_». Буквы могут быть латинскими: a-z, A-Z, или ASCII-символами с кодами от 127 до 255. Заметьте, PHP, в отличие от многих компиляторов (языков), позволяет использовать символы кириллицы в именах переменных.
$var = "Петя": $Var = "Вася";
echo "$var. $Var";
// напечатает "Петя. Вася"
$4site = 'not yet':
// Ошибка; имя начинается с цифры
$_4site = 'not yet1.
// правильно: начинается с подчеркивания
$переменная - 'mansikka',
// правильно: русские буквы разрешены.

РПР 4 позволяет передавать значения переменных не только копированием, но и «по ссылке». Тогда новая переменная будет просто ссылаться на старую и станет ее псевдонимом (alias). Изменения одной из них будут так же отражаться и на другой.

Чтобы связать по ссылке две переменных, перед исходной переменной ставится амперсант «&».
<?php $а = 'Яяя',
$b = &$а: // ссылка на $а.
$b = "Это $b". // изменяя $b мы одновременно изменяем $а
echo $a // Выведет 'Это Яяя'
echo $b. // Выведет 'Это Яяя' ?>

Естественно, что ссылка может указывать только на переменную.
<?php $foo = 25.
$bar = &$foo: // Присваивание допускается
$bar - &(24 * 7). // Ошибка; ссылка на
неименованное значение
function test() { return 25. // функция возвращает значение, а не ссылку. }
$bar = StestO. // Ошибка: ?>

Предопределенные переменные

Состав предопределенных переменных РНР во многом зависит от серверного ПО и его конфигурации. Не все из них доступны при запуске сценария из командной строки. Чтобы выяснить, какие из переменных доступны, и узнать их значения, воспользуйтесь функцией phpinfo().

Переменные РНР

Эти переменные создаются самим РНР. Переменные SH7TP_*_VARS доступны, только если разрешен параметр конфигурации track_vars (в РНР 4.0.3 он разрешен всегда, вне зависимости от файла конфигурации).

При установке директивы register_globals в файле конфигурации эти переменные становятся глобально доступными (фактически они копируются в массив SGLOBALSC]). Эту установку следует использовать с осторожностью, а лучше вовсе исключить, так как хранение переменных в массивах безопасно, а глобальные эквиваленты могут быть перезаписаны передачей сценарию одноименных параметров (не исключая и злоумышленного варианта подобной операции). В случае невозможности блокирования данной установки удостоверьтесь, что данные, которые вы используете из этих переменных, безопасны.

$argv[]

Массив аргументов, передаваемых сценарию. При запуске сценария iu командной строки этот массив содержит список параметров командной строки, как и в С. При вызове методом GET он содержит строку запроса (то есть то, что следует после имени сценария за знаком вопроса).

$argc

Число аргументов, передаваемых сценарию (и, соответственно, содержащихся в массиве Sargv[]). Равно count(Sargv). Для сценария, запускаемого из командной строки, это число параметров; для PHP-страницы это значение 0 или 1.

$PHP_SEI.F

Файловое имя текущего исполняемого сценария РНР относительно корневого каталога web-сервера (например, «/index.php»). При запуске сценария из командной строки значение недоступно.

$HTTP_COOKIE_VARSn

Ассоциативный массив переменных, посылаемых сценарию через HTTP cookies.

$HTTP_GET_VARS[]

Ассоциативный массив переменных, посылаемых сценарию методом HTTP GET (указываются в строке HTTP запроса).

$HTTP_POST_VARS[]

Ассоциативный массив переменных, посылаемых сценарию методом HTTP POST (передаются от html-форм, скрыто от пользователя).

$HTTP_POST_FILES[]

Ассоциативный массив, содержащих информацию о файлах, загружаемых на web-сервер методом HTTP POST.

$HTTP_ENV_VARS[]

Ассоциативный массив переменных окружения среды, в которой запущен сценарий (например, OS, Path, TEMP, System Root и т. п.).

$HTTP_SERVER_VARS[]

Ассоциативный массив переменных web-сервера. См. ниже.

Переменные web-сервера (Apache) - $HTTP_SERVER_VARS[]

Приведенные переменные создаются web-сервером Apache. Другие серверы имеют сходный набор переменных. Большинство переменных декларировано спецификацией CGI 1.1 (http://hoohoo.ncsa.uiuc. edu/cgi/env.html)

Если сценарий запущен из командной строки, большинство из них недоступно.

GATEWAYJNTERFACE

Версия CGI спецификации, используемой web-сервером; например, «CGI/1.1».

SERVER_NAME

Имя хоста сервера, например «localhost». Если сценарий запускается с виртуального хоста, то используется имя для этого хоста.

SERVER_SOFTVJARE'

Описание серверного ПО, передающееся в заголовках ответов на запрос HTTP (например, «Microsoft-IIS/5.0»).

SERVER_PROTOCOL

Протокол, по которому запрашивается web-страница и ее версия, например «НТТР/1.0».

REQUEST_METHOD

Метод HTTP запроса, которым запрашивается web-страница: «GET», «HEAD», «POST» или «PUT».

QUERY_STRING

Строка параметров запроса. Например, для запроса «http:// localhost\index.php?x=5&s=id» этой строкой будет «x=5&s=d».

DOCUMENT_ROOT

Корневой каталог web-сервера, определяемый его конфигурацией.

НТТР_АССЕРТ

Содержание заголовка Accept: у текущего запроса, если он указан. HTTP_ACCEPT_CHARSET

Содержание заголовка Charset: у текущего запроса, если он указан. Например: «iso-8859-l,*,utf-8».

HTTP_ENCODING

Содержание заголовка Accept-Encoding: у текущего запроса, если он указан. Например: «gzip».

HTTP_ACCEPT_LANGUAGE

Содержание заголовка Accept-Language: у текущего запроса, если он указан. Например: «en».

HTTP_CONNECTION

Содержание заголовка Connection: у текущего запроса, если он указан. Например: «Keep-Alive».

HTTP_HOST

Содержание заголовка Host: у текущего запроса, если он указан. Подобно SERVER NAME.

HTTP_REFERER

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

I HTTP_USER_AGENT

Содержание заголовка User_Agent: текущего запроса, если он указан. Кодификация тина браузера и клиентского ПО, от которого получен запрос. Например: Mozilla/4.5 [en] (XI1; U; Linux 2.2.9 1586) или MoziIla/4.0 (compatible; MSIE 5.01; Windows NT 5.0). Это значение (оно используется функцией get_browser()) имеет смысл использовать для подгонки функциональности страницы (например, особенностей JavaScript) иод возможности браузера.

REMOTE_AODR

IP адрес клиента, просматривающего текущую страницу. REMOTE_PORT

Порт, используемый клиентом для коммуникации с web-сервером. SCRIPT_FILENAME

Имя сценария, включающее абсолютный путь к нему (по мнению web-сервера).

SERVER_ADMIN

Установка «администратор сервера» конфигурации web-сервера. SERVER_PORT

Порт, используемый web-сервером для коммуникации с клиентом. Определяется конфигурацией web-сервера. Обычно 80, для SSL (безопасных соединений) по умолчанию 443.

SERVER_SIGNATURE

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

PATHJRANSLATED

Имя сценария, включающее абсолютный путь к нему (указывается расположение сценария в файловой системе, а не в каталогах web-сервера). Сравните со SCRIPT_FILENAME.

SCRIPTJIAME

Путь к текущему сценарию в web-каталогах. REQUESTER I

Строка, которой запрашивается сценарий, например: «/index.html».

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

Область видимости переменной - это контекст, в котором переменная сохраняет свое значение и это значение доступно. В РНР область видимости ограничена текущим файлом, но распространяется на файлы, присоединяемые директивами include и require.
Переменные, используемые вне функций,
недоступны внутри них.
$а = 1. /* глобальная область */ Function Test () {
echo $a; /* используется локальная
переменная, которая пуста*/ }
Test (). //не напечатает ничего

Это отличает РНР от С, где внешние переменные всегда доступны внутри функций, если только внутри функции не объявляется переменная с именем внешней. Это сделано для того, чтобы внутри функций нельзя было случайно изменить внешние переменные. Если же все-таки требуется доступ к внешним переменным, они должны быть объявлены глобальными внутри функции.
$а = 1:$b = 2. Function Sum () {
global $a. $b.//использовать глобальные переменные
$b = $а + $b. }
Sum ():
echo $b; // напечатает «3»

Другой способ доступа к внешним неременным - это обращение к ассоциативному массиву $GLOBALS, в котором содержатся все переменные, используемые вне функций.
$а = 1; $b = 2. Function Sum () {
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; }
Sum ();
echo $b; // напечатает «3»

Можно пойти на ухищрения и сделать глобальные переменные доступными для чтения внутри функции с помощью функции extract():
function foo() {
extract (SGLOBALS):
// ... }

Статические переменные

Статические переменные не уничтожаются после завершения функции и сохраняют свое значение на протяжении всего времени исполнения сценария. Инициализируются они только при первом запуске функции.
Function Test () {
static $a = 0: echo $a; $а++;
}
Test (): // напечатает «О»
Test (): // напечатает «1»
Test (). // напечатает «2»

Статические переменные также используются при рекурсивных вызовах (то есть когда функция вызывает сама себя). Не забудьте обеспечить контроль за тем, чтобы рекурсивный вызов не привел к бесконечному циклу!
Function Test ()) {
static Jcount = 0;
$count++;
echo $count:
if (Scount < 10) Test ():
$COUnt-; }

«Переменные» переменные (оператор $)

Иногда требуется иметь изменяемые имена переменных, например в случае, если нужно будет производить стандартные действия над различными переменными, но еще неизвестно, какими именно. Такие переменные перед своим «именем» имеют двойной знак доллара вместо одного, чтобы можно было изменять их значения (то есть значения тех неременных, на которые они указывают). При этом если перед такой переменной стоит одинарный знак доллара, ее значение является именем реальной переменной.

Допустим, $А = "X", а $$А = "value", тогда $Х = "value"'.
$а = "hello". // пня переменной $$а
$$а = "world". // Shell о содержит "world"
echo "$a ${$a}"; // напечатает hello world
echo "$э Shell о": // напечатает hello world

При использовании «переменных» переменных с массивами возникает проблема неопределенности. Что означает $$а[1]? Возможно, вы хотите использовать переменную с именем, содержащимся в $а[1], или $$а как переменную массива, а затем ее элемент [1]. В первом случае мы имеем дело с массивом указателей, а во втором - с указателем на массив. Синтаксис фигурных скобок разрешает эту проблему: ${$а[1]} для первого случая и ${$а}[1] для второго. Для того чтобы правильно интерпретировать действие двойного знака доллара, думайте о первом из них, как об операторе разыменования.

Поскольку РНР интерпретирует код, то возможно даже использовать выражения в именах переменных (в фигурных скобках оператора разыменования):
$var="world":
Shello_world = "hi everyone".
echo S{"hello_".$var}; // выводит hi everyone

Передача переменных PHP-сценарию

HTML-формы

При вызове PHP-сценария HTML-формой все переменные формы автоматически становятся доступными сценарию. При включенном параметре конфигурации track_vars все эти переменные затем сохраняются в ассоциативных массивах $HTTP_POST_VARS, $HTTP_GET_VARS и/или $HTTP_POST_FILES, в зависимости от метода вызова сценария ($НТТР_ SERVERJ/ARS [REQUEST_METHOD] ).
<form act1on="foo.php" method="post">
Name: <input type="text" name="use>~name">
<br>
<mput type="submlt"> </form>

При посылке данных этой формы текст, введенный в поле Name, сохраняется в $HTTP_POST_VARS['username']. При включенной директиве конфигурации register_globa1s на глобальном уровне это значение становится также доступно в переменной Susername.

Данные могут также быть посланы формой и затем распознаны РНР, если они заносятся в массивы. Таким способом возможно группировать связанные переменные или получать данные с мультиселек-тивпых элементов ввода:
<form action="array php" method="post">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name-"personal[email]"><br>
Beer: <br> <select multiple name='"beer[]">
<opt i on va1ue="wa rthog">Wa rthog
<option value="guinness">Gumness
<option value="stuttgarter">Stuttgarter Schwabenbi-ди
/select>
<input type="submit"> </form>

Также PHP 4 позволяет использовать в формах многомерные массивы.

Имена переменных кнопки IMAGE SUBMIT

Вместо кнопки submit (отправить) для форм возможно использование картинки:
<input type»image src="image.gif" name="sub">

При щелчке мытью на этом рисунке и отправке данных формы посылаются два дополнительных значения: sub_x и sub_y. Они содержат относительные координаты точки нажатия на рисунок. Знатоки заметят, что браузером на самом деле посылаются переменные, разделенные точкой (sub.x и sub.у), но РНР автоматически преобразует точки в знаки подчеркивания.

HTTP Cookies

РНР незаметно для пользователя поддерживает HTTP cookies, следуя спецификации Netscape (http://www.netscape.com/newsref/std/ cookie_ spec.html). Cookies - это механизм хранения данных на стороне клиента, осуществляемый браузером для того, чтобы сервер мог опознать пользователей, однажды посетивших сайт. Использовать cookies позволяет функция SetCookie(). Cookies передаются в заголовке HTTP, поэтому вызывать функцию SetCookie необходимо до того, как любой текст будет передан браузеру. С тем же ограничением можно использовать функцию Header(). Все cookies, отправляемые серверу клиентом, автоматически становятся PHP-переменными, подобно данным, передаваемым методами GET и POST.

Если требуется назначить одному cookie несколько значений, просто добавьте [] к его имени. Например:
SetCoone ("MyCookief]". "Testing". timeO+3600);

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

Поэтому если требуется не замена значения, а добавление (напри-мер, для корзины покупок в «электронном магазине»), то необходимо передавать значение в новом элементе массива, сопровождающееся автоинкрементируемым значением счетчика. Например:
$Count++.
// «Товаров» в «корзине» прибавилось SetCookie
("Count". SCount. timeO+3600):
// Всего «товаров» в «корзине»
SetCookie ("Cart[$Count]",
Jitem. time()+3600):
// Наименование добавляемого «товара»

Переменные окружения среды

РНР автоматически делает переменные окружения среды доступными для сценария, как обычные переменные РНР.
echo $HOME;
// напечатать переменную Unix-среды НОМЕ,
если она установлена echo
$PATH; // напечатать пути используемые
по ум. в Windows

Так как информация, передаваемая методами GET, POST и в Cookie, также создает переменные на глобальном уровне РНР, и их имена могут конфликтовать между собой, бывает полезно выяснить значение неременных среды явно, используя функцию getenv(). Для установки значений переменной в окружении среды используется функция putenv().

Точки в именах получаемых переменных

Обычно РНР не изменяет имена передаваемых сценарию переменных. Но заметьте, что наличие точки в имени переменной вызовет ошибку при попытке ее использования.
$varname.e>t: /* неправильное имя переменной */


Интерпретатор РНР попытается выполнить операцию конкатенации (оператора точка), что н вызывает ошибку. Поэтому РНР заменяет точку в именах получаемых переменных на знак подчеркивания.

Определение типа переменных

Так как РНР автоматически меняет типы переменных, не всегда известно, какой тип она имеет. Поэтому в РНР имеются функции для определения типа переменных: gettype(), is_long(), is_double(), is_string(), is_array() и is_object().[/email]

Учебник по основам PHP   Теги:

Читать IT-новости в Telegram

Читайте также:

Переменные

Информационные технологии
Мы в соцсетях ✉