Строки в PHP – это последовательность символов, такая как «We hold
these truths to be self evident», или «Жил да был», или даже
«111211211». При чтении из файла или выводе в броузер данные представляются в виде строк.
Отдельные символы можно считать элементами индексированного
массива, как в C. Первый символ в строке имеет нулевой индекс. Например:
$neighbor = 'Hilda';
print $neighbor[3];
d
Однако строки в PHP отличаются от строк в C тем, что они могут быть
бинарными (то есть могут содержать символ NULL) и могут произвольно менять свой размер, который ограничен лишь объемом доступной памяти.
Строки можно задавать тремя способами: в одинарных кавычках,
в двойных кавычках и в формате встроенного документа (heredoc).
При использовании одинарных кавычек следует экранировать только
два специальных символа: обратную косую черту и саму одинарную
кавычку:
print 'I have gone to the store.';
print 'I\'ve gone to the store.';
print 'Would you pay $1.75 for 8 ounces of tap water?';
print 'In double quoted strings, newline is represented by \n';
I have gone to the store.
I've gone to the store.
Would you pay $1.75 for 8 ounces of tap water?
In double
quoted strings, newline is represented by \n
(В строках с двойными кавычками символ новой строки представлен \n)
Задавать строки в одинарных кавычках проще и быстрее, поскольку в этом случае PHP не проверяет наличие переменных или почти всех escape-последовательностей. Строки в двойных кавычках не распознают escape-код одинарной кавычки, но распознают вставленные в строку переменные и escape-последовательности, представленные в таблице:
Escape-последовательность | Символ |
---|---|
\n | Новая строка (ASCII 10) |
\r | Возврат каретки (ASCII 13) |
\t | Табуляция (ASCII 9) |
\\ | Обратная косая черта |
\$ | Знак доллара |
\" | Двойные кавычки |
\{ | Левая фигурная скобка |
\} | Правая фигурная скобка |
\[ | Левая скобка |
\] | Правая скобка |
от \0 до \777 | Восьмеричное значение |
от \x0 до \xFF | Шестнадцатеричное значение |
print "I've gone to the store.";
print "The sauce cost \$10.25.";
$cost = '$10.25';
print "The sauce cost $cost.";
print "The sauce cost \$\061\060.\x32\x35.";
I've gone to the store.
The sauce cost $10.25.
The sauce cost $10.25.
The sauce cost $10.25.
Последняя строчка кода печатает цену соуса правильно, поскольку
символ 1 имеет десятичный ASCII-код 49 и восьмеричный код 061.
Символ 0 имеет десятичный ASCII-код 48 и восьмеричный код 060;
2 имеет десятичный ASCII-код 50 и шестнадцатеричный код 32; а 5 имеет десятичный ASCII-код 53 и шестнадцатеричный код 35.
Строки встроенного документа распознают все те вхождения и escape-коды, что и строки в двойных кавычках, но при этом они допускают
использование двойных кавычек. Встроенный документ начинается
с <<< и метки. Эта метка (без ограничивающих ее пробельных символов) с точкой с запятой в конце оператора (если это необходимо) заканчивает встроенный документ. Например:
print <<< END
It's funny when signs say things like:
Original "Root" Beer
"Free" Gift
Shoes cleaned while "you" wait
or have other misquoted words.
END;
It's funny when signs say things like:
Original "Root" Beer
"Free" Gift
Shoes cleaned while "you" wait
or have other misquoted words.
При использовании встроенного документа сохраняются новые строки, интервалы и кавычки. Метка конца строки чувствительна к регистру, и согласно принятому соглашению она записывается в верхнем регистре. Таким образом, следующее выражение правильное:
print <<< PARSLEY
It's easy to grow fresh:
Parsley
Chives
on your windowsill
PARSLEY;
Как и следующее
print <<< DOGS
If you like pets, yell out:
DOGS AND CATS ARE GREAT!
DOGS;
Встроенный документ удобен при выводе на печать документа HTML с включенными в него переменными:
if ($remaining_cards > 0) {
$url = '/deal.php';
$text = 'Deal More Cards';
} else {
$url = '/new game.php';
$text = 'Start a New Game';
}
print <<< HTML
There are <b>$remaining_cards</b> left.
<p>
<a href="$url">$text</a>
HTML;
</p>
Здесь точка с запятой после ограничителя конца строки необходима, поскольку она сообщает PHP о конце оператора. Однако в некоторых случаях точку с запятой ставить не надо:
$a = <<< END
Once upon a time, there was a
END
. ' boy!';
print $a;
Once upon a time, there was a boy!
Точки с запятой нет, поскольку данное выражение необходимо продолжить на следующей строке. Заметим также, что оператор конкатенации строк и ограничитель конца строки следует располагать в разных строках для того, чтобы PHP смог распознать ограничитель.