|
Строкой (string)
называется последовательность символов,
которая рассматривается как единое целое,
но при этом обеспечивает доступ к отдельным
символам. Примеры строк:
thesaurus
49ers
abc
&%/$#
Обратите внимание: в РНР не
поддерживается символьный тип данных.
Строковый тип может рассматриваться как
единое представление для
последовательностей, состоящих из одного
или нескольких символов.
Строковое присваивание
Строки делятся на две категории в
зависимости от типа ограничителя — они
могут ограничиваться парой кавычек ("
") или апострофов (' '). Между этими
категориями существуют два принципиальных
различия. Во-первых, имена переменных в строках, заключенных в кавычки,
заменяются соответствующими значениями, а
строки в апострофах интерпретируются
буквально, даже если в них присутствуют
имена переменных,
Два следующих объявления дают одинаковый
результат:
$food = "meatloaf";
$food = 'meatloaf';
Однако результаты следующих объявлений
сильно различаются:
$sentence = "My favorite food is $food";
$sentence2 = 'My favorite
food is $food';
Переменной $sentence присваивается строка
My favorite food is
meatloaf.
Обратите внимание: переменная $food
автоматически интерпретируется. С другой
стороны, переменной $sentence2 присваивается
строка
My favorite food is $food.
В отличие от переменной $sentence, в $sentence2
осталась не интерпретированная переменная
$food. Различия обусловлены использованием
кавычек и апострофов при присваивании
переменным $sentence и $sentence2.
Прежде чем рассматривать второе
фундаментальное различие между строками,
заключенными в апострофы и в кавычки,
необходимо познакомиться со служебными
символами, используемыми в строках РНР. В
РНР, как и в большинстве современных языков
программирования, строки могут содержать
служебные символы (например, символы
табуляции или новой строки), перечисленные
в табл. 2.1.
Таблица
2.1. Служебные
символы в строках
|
Последовательность |
Смысл
|
| \n |
Новая строка |
| \r |
Возврат курсора |
| \t |
Горизонтальная табуляция |
| \\ |
Обратная косая черта |
| \$ |
Знак доллара |
| \" |
Кавычка |
| \[0-7]{1,3} |
Восьмеричная запись числа (в виде
регулярного выражения) |
| \x[0-9A-Fa-f]{l,2} |
Шестнадцатиричная запись числа (в виде
регулярного выражения) |
Второе принципиальное различие
заключается в том, что в строках,
заключенных в кавычки, распознаются все
существующие служебные символы, а в строках,
заключенных в апострофы, — только
служебные символы «\\» и «\». Следующий
пример наглядно демонстрирует различия
между присваиванием строк, заключенных в
кавычки и апострофы:
$double_list = "item1\nitem2\nitem2";
$single_list = 'item1\nitem2\nitem2';
Если вывести обе строки в браузере,
окажется, что строка в кавычках содержит
внутренние символы новой строки, а в строке
в апострофах последовательность \n
выводится как обычные символы. Хотя многие
служебные символы в браузерах
несущественны, при форматировании для
других условий они играют очень важную роль.
Помните об этом, выбирая между кавычками и
апострофами, и вам удастся избежать многих
неожиданностей.
Синтаксис встроенной документации
Второй вариант синтаксиса ограничения
строк, представленный в HTML4, называется встроенной
документацией (here
doc). В этом варианте синтаксиса строка
начинается с символов <<<, за которыми
следует некоторый идентификатор по вашему
выбору, затем строка, присваиваемая
переменной. Конструкция заканчивается
вторым экземпляром того же идентификатора.
Пример:
$paragraph = <<<DELIM
This is a string that
Will be interpreted
exactly
As it is written in the
variable assignment,
DELIM;
Выбранный идентификатор не должен
присутствовать в присваиваемой строке.
Более того, первый символ завершающего
идентификатора должен
находиться
в первом столбце строки, завершающей
конструкцию.
Обращение к отдельным символам строк
К отдельным символам строки можно
обращаться как к элементам массива с
последовательной нумерацией (см. следующий
раздел). Пример:
$sequence_number = "04efgh";
$letter = Ssequence_number[4];
Переменной $ letter будет присвоено значение g.
Как вы узнаете из следующего раздела, в
РНР нумерация элементов массивов
начинается с 0. Соответственно, выражение
$sequence_number[l] будет равно 4. |