Руководство по РНР 3.0 - Описание языка
Синтаксис PHP заимствован непосредствено из C.
Java и Perl также повлияли на синтаксис данного
языка.
Есть три способа выхода из HTML и перехода в
"режим PHP кода":
Пример 5-1. Способы перехода из HTML
1. <? echo("простейший способ, инструкция обработки SGML\n"); ?>
2. <?php echo("при работе с XML документами делайте так\n"); ?>
3. <script language="php">
echo ("некоторые редакторы (подобные FrontPage) не
любят обрабатывающие инструкции");
</script>;
4. <% echo("От PHP 3.0.4 можно факультативно применять ASP-тэги"); %>
|
Инструкции (утверждения) разделяются также как
в C или Perl - точкой с запятой.
Закрывающий тэг (?>) тоже подразумевает конец
утверждения, поэтому следующие записи
эквивалентны:
PHP поддерживает переменные следующих типов:
- integer - целое
- double - число с дробной частью
- string - строковая переменная
- array - массив
- object - объектная переменная
- pdfdoc - PDF-документ (только при наличии поддержки
PDF)
- pdfinfo - PDF-инфо (только при наличии поддержки PDF)
Тип переменной обычно не устанавливается
программистом; вместо этого, он определяется PHP
во время выполнения программы, в зависимости от
контекста в котором данная переменная
используется.
Если вам нравится указывать тип переменной
непосредственно, вы можете использовать для
этого инструкцию cast
либо функцию settype().
Учтите, что переменная может вести себя по
разному в определенных ситуациях, в
зависимости от того, какой тип определен для нее
в данное время. Более подробно это описано в
разделе Изменение
типа.
Для инициализации переменной в PHP вы просто
присваиваите ей значение. Для большинства
переменных это именно так; для массивов и
объектных переменных, однако, может
использоваться несколько иной механизм.
Массив может инициализироваться одним из двух
способов: последовательным присвоением
значений, или посредством конструкции array() (которая описана в разделе Функции
Массивов).
При последовательном добавлении значений в
массив вы просто записываете значения элементов
массива, используя пустой индекс. Каждое
последующее значение будет добавляться в
качестве последнего элемента массива.
Как в C и Perl, элементы массива нумеруются
начиная с 0, а не с 1.
Для инициализации объектной переменной
используйте новое предписание для сопоставления
данного объекта объектной переменной.
Областью переменной является контекст, внутри
которого она определена. Главным образом, все
переменные PHP имеют одну область. Однако, внутри
функций определенных пользователем,
представлена локальная область функции. Любая
переменная, определенная внутри функции, по
умолчанию ограничена локальной областью
функции. Например:
Этот скрипт не выдаст что-либо на выходе,
поскольку инструкция echo относится к локальной
версии переменной $a, значение которой
присваивается не внутри этой области. Вы можете
заметить, что здесь имеется некоторое отличие от
языка C, в том что глобальные переменные в C
автоматически действуют и внутри функций,
если только они не переписываются локальными
определениями. Это может вызвать некоторые
проблемы, т.к. по неосторожности можно изменить
глобальную переменную. В PHP глобальные
переменные должны быть продекларированы
глобально внутри функции, если предполагается их
использование в данной функции. Например:
Вышеописанный скрипт выдаст значение "3".
Поскольку $a и $b декларируются глобально внутри
функции, ссылки на данные переменные трактуются
как ссылки на их глобальные версии. Нет
ограничений на количество глобальных
переменных, которыми можно манипулировать
внутри функции.
Вторым способом доступа к переменным из
глобальной области является использование
специального опеределяемого PHP массива $GLOBALS. При
этом предыдущий пример может быть записан как:
Массив $GLOBALS является ассоциативным массивом, в
котором имя глобальной переменной является
ключом, а значение этой переменной является
значением элемента массива.
Другой важной характеристикой от области
определения переменной является статическая
переменная. Статическая переменная существует
только в локальной области функции, но она не
теряет своего значения когда программа, при
исполнении, покидает эту область. Рассмотрим
следующий пример:
Эта функция совершенно бесполезна практически,
поскольку каждый раз при ее вызове она
устанавливает $a в 0 и выводит "0".
Выражение $a++ , которое увеличивает значение
переменной, так же бесполезно, поскольку при
выходе из функции переменная $a исчезает. Для
придания дееспособности функции подсчета,
которая не теряла бы нить текущего счета,
переменная $a декларируется как статическая:
Теперь, каждый раз при вызове функции Test() она
будет выводить значение $a и увеличивать его.
Статические переменные также весьма
существенны, когда функции вызываются
рекурсивно. Рекурсивные функции - это те, которые
вызывают сами себя. Составлять рекурсивную
функцию нужно внимательно, т.к. при неправильном
написании можно сделать рекурсию
неопределенной. Вы должны быть уверены в
адекватности способа прекращения рекурсии.
Следующая простая функция рекурсивно считает до
10:
Иногда бывает удобно давать переменным
изменяемые имена. Такие имена могут изменяться
динамически. Обычная переменая устанавливается
так:
Изменяемая переменная берет некое значение и
обрабатывает его как имя переменной. В
приведенном выше примере значение hello
может быть использовано как имя переменной,
посредством применения двух записанных подряд
знаков доллара, т.е.:
С этой точки зрения, две переменных определены
и сохранены в символьном дереве PHP: $a с содержимым
"hello" и $hello с содержимым "world". Так,
инструкция:
осуществляет то же самое, что и инструкция:
а именно, обе они выводят: hello world.
Чтобы использовать изменяемые переменные с
массивами, необходимо решить проблему
неоднозначности. Это означает, что если вы пишете
$$a[1], то синтаксическому анализатору необходимо
знать, имеете ли вы в виду использовать $a[1] как
переменую, или вы предполагаете $$a как
переменную а [1] как индекс этой переменной.
Синтаксис для разрешения подобной
неоднозначности такой: ${$a[1]} для первого случая и
${$a}[1] для второго.
Когда программой-обработчиком формы является
PHP-скрипт, переменные этой формы автоматически
доступны для данного скрипта PHP. Например,
рассмотрим следующую форму:
Пример 5-2. Простая переменная
формы
<form action="foo.php3" method="post">
Name: <input type="text" name="name"><br>
<input type="submit">
</form>
|
При активизации формы PHP создаст переменную $name, значением которой будет то
содержимое, которое было введено в поле Name: данной формы.
PHP также воспринимает массивы в контексте
переменных формы, но только одномерные. Вы
можете, например, группировать взаимосвязанные
переменные вместе или использовать это свойство
для определения значений переменных при
множественном выборе на входе:
Пример 5-3. Более сложные
переменные формы
<form action="array.htm" method="post">
Name: <input type="text" name="personal[name]"><br>
Email: <input type="text" name="personal[email]"><br>
Beer: <br>
<select multiple name="beer[]">
<option value="warthog">Warthog
<option value="guinness">Guinness
</select>
<input type="submit">
</form>
|
Если PHP-атрибут track_vars включен, через установку
конфигурации track_vars
или директивой <?php_track_vars?>,
тогда переменные, активизированные посредством
методов POST или GET, будут также находиться в
глобальных ассоциативных массивах $HTTP_POST_VARS и
$HTTP_GET_VARS соответственно.
При активизации (запуске) формы можно
использовать рисунок (изображение) вместо
стандартной кнопки запуска, в тэге подобном
этому:
Когда пользователь нажимает кнопку мыши где-либо
над таким рисунком, сопровождающая форма
передается на сервер с двумя дополнительными
переменными, sub_x и sub_y. Они содержат координаты
места нажатия кнопки мыши пользователем внутри
данного рисунка. Можно отметить, что практически,
реальные имена переменных передаваемые
браузером, содержат точку вместо символа
подчеркивания, но PHP конвертирует точку в элемент
подчеркивания (underscore) автоматически.
PHP очевидным образом поддерживает HTTP кукисы,
как это определено в Netscape's Spec.
Кукисы являются механизмом хранения данных в
удаленном браузере, используемым для поддержки
процедуры обмена или идентификации ответа
пользователя. Кукисы можно устанавливать
используя функцию SetCookie().
Кукисы являются частью заголовка HTTP, поэтому
функция SetCookie()
должна вызываться прежде чем какие-либо
передаваемые данные посылаются браузеру. Это
такое же ограничение, как и для функции Header().
Любые кукисы, посылаемые вам клиентом,
автоматически преобразовываются в переменные PHP,
также как данные методов GET и POST.
Если необходимо назначить множественные
значения одному кукису, просто добавьте
квадратные скобки [ ] к имени кукиса. Например:
Учтите, что текущий кукис заменит предыдущий с
тем же именем в вашем браузере, если только путь
или домен не являются различными. Поэтому, при
работе с программами обслуживания карт вы можете
использовать для сохранения данных счетчик и
посылать его значения дальше и т.п.
Пример 5-4. Пример функции SetCookie
$Count++;
SetCookie ("Count", $Count, time()+3600);
SetCookie ("Cart[$Count]", $item, time()+3600);
|
PHP автоматически создает переменные окружения,
как и обычные переменные.
Хотя при поступлении информации механизмы GET,
POST и Cookie также атоматически создают переменные PHP,
иногда лучше явным образом прочитать переменную
окружения, для того чтобы быть уверенным в
получении ее правильной версии. Для этого может
использоваться функция getenv().
Для установки значения переменной окружения
пользуйтесь функцией putenv().
PHP не требует явного определения типа при
объявлении переменной, тип переменной
определяется по контексту в котором она
используется. То есть, если вы присваиваете
строковое значение переменной var,
var становится строкой. Если
затем присвоить переменной var значение
целого (числа), то она станет целым.
Примером автоматического преобразования типа
в PHP может служить оператор сложения '+'. Если
какой-либо из оперендов является числом с
дробной частью (тип double), то затем все операнды
оцениваются как double и результат будет иметь тип
double. Иначе, эти операнды будут интерпретированы
как целые (integers) и результат будет так же иметь
тип integer. Отметим, что при этом НЕ меняются типы
самих операндов, меняется только оценка этих
операндов.
Если последние два примера выше кажутся
неясными, смотрите Преобразование
строк.
Если вы хотите чтобы переменная принудительно
оценивалась как имеющая определенный тип,
смотрите раздел Приведение
типа. Если вы желаете изменить тип переменной,
смотрите Settype().
Поскольку PHP определяет типы переменных и
преобразует их (в общем) по мере необходимости, не
всегда очевидно какой тип данная переменная
имеет в какой-то отдельный момент. Поэтому PHP
включает несколько функций, которые позволяют
определить текущий тип переменной. Это функции gettype(),
is_long(),
is_double(),
is_string(),
is_array(),
и is_object().
Приведение типа работает в PHP во многом так же
как в C: название требуемого типа записывается в
круглых скобках перед переменной, которая должна
быть приведена к данному типу.
Допускается следующее приведение типов:
- (int), (integer) - приведение к целому
- (real), (double), (float) - приведение к типу double
- (string) - приведение к строке
- (array) - приведение к массиву
- (object) - приведение к объектной переменной
Заметим, что табуляция и пробелы допускаются
внутри круглых скобок, поэтому следующее
функционально эквивалентно:
Когда строковая переменная оценивается как
числовая, результирующее значение и тип
переменной определяются следующим образом.
Переменная string будет оценена как double, если она
содержит любой из символов '.', 'e', или 'E'. Иначе она
будет оценена как integer.
Данное значение задается начальной частью
строковой переменной. Если строка начинается с
допустимых цифровых данных, то это значение и
будет использоваться. Иначе, будет значение 0 (ноль).
Допустимые цифровые данные - это конструкция из
факультативного символа, следующего за одной или
несколькими цифрами (содержащими факультативно
десятичную точку), обозначающего экспоненту.
Экспонента может обозначаться символом 'e' или 'E',
который может следовать за одной или несколькими
цифрами.
Дополнительную информацию смотрите в
руководстве Unix страница для strtod(3).
PHP поддерживает как скалярные так и
ассоциативные массивы. Фактически, между ними
нет разницы. Вы можете создать массив используя
функции list() или array(),
или можно явно задать значение каждого элемента
массива.
Можно также создать массив просто добавляя в
него значения.
Массив может сортироваться функциями asort(), arsort(), rsort(),
sort(), uasort(), usort(), и uksort() в зависимости от типа желаемой
сортировки.
Подсчет количества элементов массива
осуществляется функцией count().
Перемещаться по массиву позволяют функции next() и prev(). Другим типовым способом
перемещения по массиву является использование
функции each().
Содержание