8.2. Строки
Однозначная идентификация переменной позволила создателям РНР дать возможность программистам использовать переменные непосредственно внутри строк.
Например:
$name = 'John';
$age = 23;
echo "$name is $age years old";
После выполнения данного примера мы получим строку: «John is 23 years old». Думаем, вы согласитесь, что это исключительно удобно и может значительно облегчить работу. Обратите внимание на очень немаловажную деталь — в РНР, в отличие от многих других языков программирования, различаются строки, заключенные
в одинарные и двойные кавычки. Подобное замещение имен в переменных их значениями производится только в строках, заключенных в двойные кавычки! Это очень важно запомнить, дабы избежать ошибок в будущем.
ВНИМАНИЕ
Строки, заключенные в двойные кавычки, могут содержать и более сложные выражения. Для этого необходимо заключить их в фигурные скобки:
$man = array ('John', 23) ;
echo "{$man[0]} is {$man[1]} years old";
Результат будет таким же, как и в предыдущем примере.
У РНР есть еще одна интересная особенность работы со строками — указатель here docs.
Пример 8.1. Маркер TEXT
$str = <<<ТЕХТ
There can be any text
which will be stored
into a string
right in the same way
as it
typed here
TEXT;
В данном примере переменной будет весь текст, содержащийся между начальным и конечным маркерами (здесь — строка TEXT, но этот маркер может быть любой последовательностью символов). На то что это here doc, указывает наличие <<< непосредственно после знака присваивания.
В примере продемонстрировано удобство того, что если строке необходимо присвоить какой-то сложный текст, особенно, если необходимо сохранить его форматирование, то here doc окажется незаменимым помощником.
СОВЕТ
В случае использования here docs есть возможность использования переменных внутри строки, как это было описано ранее.
Строки могут задаваться с использованием одного или двух наборов разделителей.
Если строка заключена в двойные кавычки ("), то переменные в строке будут раскрываться (в соответствии с некоторыми ограничениями синтаксического разбора).
Как в С и Perl, при указании специальных символов может использоваться обратный слеш () (табл. 8.1).
Таблица 8.1. Символы, кодируемые с использованием обратного слеша
Если вы попытаетесь представить символ таким образом, будут выведены и обратный слеш, и сам символ. Если в РНР 3 при этом будет выдано предупреждение на уровне E_NOTICE, то в РНР 4 предупреждающее сообщение не генерируется.
Второй способ разделения строк, который мы рассмотрим, — использование одинарных кавычек (Если строка заключается в одинарные кавычки, то в ней можно использовать только символы "\ " и "'". Таким образом, вы сможете указывать одинарные кавычки и обратные слешы в строке, отделенной одинарными кавычками. Переменные в строке, отделенной одинарными кавычками, обрабатываться не будут.
Еще один способ разделения строк — с помощью синтаксиса документов ("<<<"). После <<< укажите идентификатор, затем строку, а затем тотже самый идентификатор, чтобы закрыть "кавычки".
Закрывающий идентификатор должен начинаться непосредственно в первом столбце строки. Кроме того, идентификатор должен удовлетворять правилам именования, гак и любая метка в РНР: он должен содержать только алфавитно-цифровые символы и подчеркивания и не должен начинаться с цифры или подчеркивания.
Такой текст ведет себя, как строка в двойных кавычках, но без двойных кавычек. Это означает, что вам не придется кодировать кавычки с помощью слеша, но использовать коды со слешем все равно можно. Переменные раскрываются, но следует проявлять осторожность при выражении сложных переменных в таких строках.
Пример 8.2. Кавычки в строке типа документа
$str = <<<EOD
/* пример строки,
занимающей несколько строк
и использующей синтаксис документа */
EOD;
/* более сложный пример с переменными */
class foo {
var $foo;
var $bar;
function foo () {
$this->foo = 'Foo';
$this->bar = array{'Bar1' , 'Ваr2', 'Ваr3');
}
}
$foo = new foo();
$name = 'MyName';
echo <<<EOT
Меня зовут "$name" . Я печатаю $foo->foo.
Теперь я печатаю {$foo->bar[1]} .
Здесь должна напечататься заглавная буква 'А' : х41
EOT;
?>
Результат выполнения программы представлен на рис. 8.1.
Рис. 8.1. Результат выполнения скрипта
ВНИМАНИЕ
Поддержка такой записи строк добавлена в РНР 4.
Объединять строки можно с помощью оператора точки «,». Но обратите внимание, что оператор «+» (сложение) не будет работать при объединении строк.
Доступ к символам в строках можно получить, обрабатывая строки как индексированный массив символов, используя синтаксис языка С (пример 8.3).
Пример 8.3. Работа со строками
<?php
/* назначение строки */
$str = "Это строка";
/* добавление к ней другой строки */
$str = $str . " с дополнительным текстом";
/* еще один способ добавления включает перевод строки */
$str .= " и перевод строки в конце. n";
/* эта строка закончится текстом '<р>Число: 9</р>' */
$num = 9;
$str = "<р>Число: $num</p>";
/* эта будет */
$num = 9;
$str = '<р>Число: $num
';
/* получение первого символа строки */
$str = 'Это тест.';
$first = $str[0];
/* получение последнего символа строки */
$str = 'Это все еще тест.';
$last = $str[strlen($str)-1];
?>