Строки в PHP. Какие существуют подходы к работе с ними?

строки в php. какие существуют подходы к работе с ними?

Особенности строкового типа данных

В PHP строки являются одним из простых типов данных[1]. Они включают в себя последовательности символов. Если учесть что один символ, закодированный в UTF-8, весит 2байт (среднее значение), а строка в PHP может иметь максимальный вес 2Гбайт, то максимальная длина строки составляет более одного миллиарда символов. Этого более чем достаточно для любого типа задач.

Строка может быть определена четырьмя способами:

  • С помощью одинарных кавычек.
  • С помощью двойных кавычек.
  • С помощью конструкции Heredoc.
  • С помощью конструкции Nowdoc.

Escape-последовательности

Перед тем как начать изучение способов инициализации строк, нам необходимо понять, что такое escape-последовательности[2].

Из полиграфии и книгопечатной отрасли, различными языками программирования был позаимствован ряд функциональности. Почти все знакомы с такими терминами как: перенос строки, возврат каретки, табуляция. Данные операции производились на пишущих машинках и книгопечатных станках. Как только вы проходили до конца листа, вам нужно было осуществить перенос строки и возврат каретки в начало.

Данные операции присутствуют в языках программирования в виде escape-последовательностей. С помощью них, созданные в PHP строки, могут включать инструкции по их специфичному отображению. При выводе в браузер или текстовый файл, они будут отображаться заданным вам способом.

Перечень основных escape-последовательностей:

  • \f - разрыв страницы. Используется при выводе документа на печать.
  • \n  - перевод строки. Все символы, следующие за ним, переносятся на новую строку.
  • \r  - возврат каретки. Возвращение в начало строки при её переносе.
  • \t - табуляция. Знаком всем по нажатию в любом текстовом редакторе клавиши «Tab».

Следующие примеры наглядно демонстрируют использование escape-последовательностей при работе со строками.

//Формирование строк с escape-последовательностями
$text = "\tЯ люблю есть торты.\nЭто нагоняет на меня тоску.\n";
echo $text;

$text2 = "Решил заняться спортом.\n\tЗавтра начну бегать.";
echo $text2;

Чтобы увидеть результат работы escape-последовательностей мы должны сохранить сформированные тексты в файл и открыть его в редакторе, либо выполнить в терминале приведенную ниже команду.

php /путь_до_папки_проекта/index.php

Одинарные кавычки

Строки в PHP могут быть созданы с использованием одинарных кавычек. При этом существует несколько особенностей. Escape-последовательности внутри такой строки не работают. Все символы, помещенные внутри неё, интерпретируются как текст и никак иначе. Строка должна начинаться с одинарной кавычки и при следующем нахождении одинарной кавычки она закроется. Поэтому, если вам нужно включить внутрь текста одинарную кавычку (как текст), то её необходимо экранировать[3].

Экранирование символов происходит при добавлении перед ними косой черты «\». Если вам необходимо добавить внутрь строки символ косой черты, то нужно экранировать и его. То есть два символа косой черты подряд при выводе будут определены, как один символ косой черты.

//Обычная строка заданная через одинарные кавычки
$simpleText = 'У меня есть апельсин. Я готов поделиться.';
echo $simpleText;

//Экранирование одинарной кавычки
$singleQuote = 'Мне кажется это называется \'Щедрость\'.';
echo $singleQuote;

//Экранирование символа косой черты
$singleSlash = 'Пытаемся вывести символ косой черты "\\".';
echo $singleSlash;

Двойные кавычки

При инициализации строк с использованием двойных кавычек, PHP обрабатывает их иным способом, нежели в примерах с одинарными кавычками. В такой строке обрабатываются все escape-последовательности. Одинарная кавычка не требует экранирования при добавлении. Значения переменных и элементов массивов могут быть подставлены в строку без использования оператора конкатенации.

//Вставка в строку значения переменной и элемента массива
$tool = 'Отвертка';
$colors = ['оранжевый'];
$text = "Цвет инструмента $tool - $colors[0]";
echo $text;

//Вставка значения переменной с использованием скобок
$price = 600;
$flower = 'Редкая роза';
$text = "$flower стоит {$price}руб";
echo $text;

//Вставка значения элемента массива с использованием скобок
$event = ['birthday' => 'День рождения'];
$text = "Сегодня у моей дочери {$event['birthday']}";
echo $text;

Из примера видно, как в некоторых местах мы использовали фигурные скобки для вставки значений переменных и элементов массивов. Они служат для явного определения этих операций. Это может быть необходимо, если к значению какой либо переменной нужно подставить окончание, которое должно идти прямо за значением переменной. Согласитесь, что выражение {$cost}руб выглядит понятнее, чем $costруб. Интерпретатор так же этого не поймет и выведет пустую строку, так как переменной по имени $costруб не существует.

Важно
Если в строку осуществляется вставка значения элемента массива с указанием текстового индекса, то она в любом случае обязана быть заключенной в фигурные скобки.

Синтаксис Heredoc

Для создания строки с помощью конструкции Heredoc в PHP существует особый синтаксис. Прежде всего, нужно отметить, что строка, заключенная в эту конструкцию будет сохранена как есть, со всеми отступами и переводами строк. Чтобы понять это, рассмотрим пример.

//Формирование строки с помощью синтаксиса Heredoc
$event = 'Объявление премий';
$text = <<<"TEXT"
Сегодня, на работе, долгожданное событие.
Состоится $event. Все этого ждут.
TEXT;
echo $text;

Правила формирования Heredoc конструкции:

  1. Конструкция должна начинаться с группы открывающих символов «<<<»; 
  2. За группой открывающих символов должен идти идентификатор, заключенный в двойные кавычки. К имени идентификатора накладываются такие же требования, как и к именам переменных.
  3. После определения идентификатора обязательно необходим перевод строки. В противном случае код завершится с ошибкой.
  4. На последующих строках, после открывающего тега, вы можете располагать любое количество необходимой вам информации.
  5. Для закрытия Heredoc конструкции необходим перевод на новую строку с указанием имени открывающего идентификатора (без двойных кавычек) и точка с запятой, свидетельствующая о конце выражения.

Заметка
Строка, заданная таким образом полностью соответствует той, что задавалась бы через двойные кавычки, с одним лишь отличием – в ней не нужно указывать escape-последовательности для переводов строк, табуляций и т.д.

Синтаксис Nowdoc

Конструкция Nowdoc задается по тем же правилам что и Heredoc, но с одним лишь отличием. Идентификатор конструкции заключается не в двойные, а в одинарные кавычки. В данную конструкцию невозможно передавать значения переменных или элементов массивов. Она функционирует по тем же принципам, что и строки заданные через одинарные кавычки, но позволяет осуществлять переводы строк, табуляции и т.д.

//Формирование строки с помощью синтаксиса Nowdock
$example = 'Тестовая переменная';
$text = <<<'TEXT'
Переменная $example не будет выведена
на экран. Вместо её значения останется
слово '$example'
TEXT;
echo $text;

Термины, использованные в статье

  1. Простой тип данных — это данные, которые нет смысла дробить. К ним относятся строки, целые числа, десятичные числа, булевы значения и null. Простые типы данных участвуют в построении составных (сложных типов данных).
  2. Escape-последовательность — совокупность символов в строке, которые приобретают функциональную значимость в процессе её обработки сторонней программой. Так символ перевода строки «\n» при записи в файл и открытии его в текстовом редакторе, будет обработан и интерпретирован в перевод строки.
  3. Экранирование — манипуляция с escape-последовательностью, позволяющая аннулировать её функциональную значимость и включить в обычное текстовое содержание строки.

Последние публикации