Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

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];

?>

<< Предыдущий параграф Следующий параграф >>
Оглавление