Типи даних в PHP: Рядки (String)
Рядок (тип String) це тип даних, значеннями якого є довільна послідовність символів. Кожен символ займає 1 байт, тому PHP підтримує рівно 256 різних символів і не має вбудованої підтримки Unicode. Для того, щоб змусити PHP працювати з багатобайтними рядками існує модуль Mbstring.

На відміну від синтаксису подвійних лапок та Heredoc, змінні та керуючі послідовності для спеціальних символів, укладених у одинарні лапки, не обробляються.
Приклад використання одинарних лапок:
Приклад використання подвійних лапок:
Приклад використання heredoc-синтаксису:
Heredoc-рядок поводиться так само, як і рядок у подвійних лапках, у якому змінні обробляються. Також немає потреби екранувати лапки.
Nowdoc вказується тією ж послідовністю <<<, що використовується в Heredoc, але наступний за нею ідентифікатор розміщується в одинарних лапках, наприклад, <<<'EOT'.
Приклад використання Nowdoc рядка:
Модуль Mbstring надає функції для роботи з багатобайтними рядками та займається конвертуванням рядків з одного кодування в інше. Також призначений для роботи з кодами Unicode, такими, як UTF-8 і UCS-2.
Модуль Mbstring не входить до списку розширень за замовчуванням. Для включення достатньо додати у файлі Php.ini наступний рядок:
Також необхідно чітко задавати Mb_internal_encoding, яка встановлює внутрішнє кодування скрипта. У параметрі вказується кодування, в яке будуть перетворюватися вхідні дані HTTP запиту, з якого конвертуватиметься HTTP вивід, а також це кодування за замовчуванням для всіх функцій, що працюють з рядками, визначеними в модулі Mbstring:
Наведемо приклад, який покаже відмінність у цих функціях:
Будьте уважні з кодуванням, оскільки ці помилки дуже складно знайти. Тому рекомендується завжди жорстко вказувати необхідне кодування та використовувати відповідні функції.
#ТипиданихPHP

У 32-бітних системах і PHP версій менше 7, рядки не можуть бути більшими за 2 Гб (2147483647 байт). У PHP 7.0.0, на 64-бітних платформах немає будь-яких досяжних обмежень для довжини рядка.
Рядок може бути визначений одинарними або подвійними лапками, heredoc або nowdoc-синтаксисом (починаючи з версії PHP 5.3.0).Одинарні лапки
Найпростіший і найшвидший спосіб створити рядок є обрамлення його в одинарні лапки ('). Для використання одинарної лапки всередині рядка необхідно проекранувати її зворотним слешем (\). Для написання зворотного слеша - продублювати його (\\). В інших випадках застосування зворотного слеша буде інтерпретовано як звичайний символ без будь-якої особливої поведінки.На відміну від синтаксису подвійних лапок та Heredoc, змінні та керуючі послідовності для спеціальних символів, укладених у одинарні лапки, не обробляються.
Приклад використання одинарних лапок:
// Простий рядок
echo 'Простий рядок';
// Символ апострофа виводиться так: '
echo 'Символ апострофа виводиться так: \'';
// Перехід на новий рядок не відбудеться \n
echo 'Перехід до нового рядка не відбудеться \n';
// Змінна $example не підставиться
echo 'Змінна $example не підставиться';Подвійні лапки
Рядок, обрамлений подвійними лапками ("), обробляється PHP і розпізнає керуючі послідовності спеціальних символів, серед яких послідовність нового рядка (\n), повернення каретки (\r), горизонтальна табуляція (\t) та інші. Більш детально про відмінність одинарних та подвійних лапок у статті: Різниця між подвійними та одинарними лапками у PHP.Приклад використання подвійних лапок:
// Простий рядок
echo "Простий рядок";
// Символ подвійної лапки виводиться так: "
echo "Символ подвійної лапки виводиться так: \"";
// Перехід на новий рядок відбудеться \n
echo "Перехід до нового рядка відбудеться \n";
// Змінна підставиться
$example = "підставиться";
echo "Змінна $example";Heredoc
Визначити рядок можна за допомогою використання heredoc-синтаксису: <<<, після якого необхідно вказати ідентифікатор та переведення рядка. Далі слідує сам рядок, а по завершенню той самий ідентифікатор, що закриває вставку.Приклад використання heredoc-синтаксису:
$variable = 'другий рядок';
$example = <<<EOT
перший рядок
$variable
EOT;
echo $example;Результат виконання:// перший рядок
// другий рядокІснують суворі правила створення Heredoc рядка. Ідентифікатор повинен містити лише буквено-цифрові символи та знак підкреслення, і не повинен починатися з цифри (символ підкреслення дозволяється). Рядок із закриваючим ідентифікатором не повинен містити інших символів, за винятком крапки з комою (;).Heredoc-рядок поводиться так само, як і рядок у подвійних лапках, у якому змінні обробляються. Також немає потреби екранувати лапки.
Nowdoc
Nowdoc схожий на Heredoc, але всередині нього не здійснюється жодних підстановок, що робить його ідеальним для впровадження PHP-коду або інших великих блоків тексту без необхідності його екранування.Nowdoc вказується тією ж послідовністю <<<, що використовується в Heredoc, але наступний за нею ідентифікатор розміщується в одинарних лапках, наприклад, <<<'EOT'.
Приклад використання Nowdoc рядка:
$variable = 'другий рядок';
$example = <<<'EOT'
перший рядок
$variable
EOT;
echo $example;Результат виконання:// перший рядок
// $variableМодуль Mbstring для роботи з багатобайтними рядками
У мові програмування є поняття символу. Кожен символ складається з певної кількості байтів, що його точно описує. У більшості мов всі необхідні символи можна закодувати одним восьмибітним значенням, але існують також мови, що вимагають стільки символів, що вони не вміщаються в один байт.Примітка: Байт складається з восьми біт, який може містити одне з двох різних значень, одиниця або нуль. Один байт може мати лише 256 унікальних значень.
Багатобайтні рядки, для яких використовують спеціально розроблені схеми кодування, можуть містити більш ніж 256 символів. Однак, більшість функцій PHP не можуть працювати з багатобайтними рядками. При цьому вони повертатимуть зовсім неправильний результат. Для правильної обробки цих рядків, необхідно використовувати спеціальні функції, так як у таких кодуваннях два або більше послідовних байтів можуть задавати один символ.Модуль Mbstring надає функції для роботи з багатобайтними рядками та займається конвертуванням рядків з одного кодування в інше. Також призначений для роботи з кодами Unicode, такими, як UTF-8 і UCS-2.
Модуль Mbstring не входить до списку розширень за замовчуванням. Для включення достатньо додати у файлі Php.ini наступний рядок:
extension=mbstringБільшість стандартних функцій мають аналоги для роботи з багатобайтними рядками та відрізняються лише префіксом "mb_" та деякими параметрами кодування.Також необхідно чітко задавати Mb_internal_encoding, яка встановлює внутрішнє кодування скрипта. У параметрі вказується кодування, в яке будуть перетворюватися вхідні дані HTTP запиту, з якого конвертуватиметься HTTP вивід, а також це кодування за замовчуванням для всіх функцій, що працюють з рядками, визначеними в модулі Mbstring:
mb_internal_encoding('UTF-8');Наприклад, для функції Strlen аналогом є функція Mb_strlen. Так само і для інших функцій.Наведемо приклад, який покаже відмінність у цих функціях:
echo strlen('Вася Пупкін'); // 21
echo mb_strlen('Вася Пупкін'); // 11Як видно з прикладу, функція Mb_strlen покаже правильне значення. Функція Strlen для рядка 'Вася Пупкін' повернула 21 байт. Функція Mb_strlen підрахувала кількість символів у рядку з урахуванням того, що під різні символи відводиться різна кількість байтів. У секції [mbstring] конфігураційного файлу php.ini можна виявити директиву mbstring.func_overload, яка за замовчуванням набуває значення 0. Якщо виставити її на значення 2, стандартні функції РНР будуть замінюватися їх mbstring-аналогами. Переключивши значення директиви і перезавантаживши сервер, ви зможете переконатися в цьому самостійно: функція Strlen з прикладу поверне правильне значення 11 символів. Але механізм перевантаження функцій оголошено застарілим та його використання вкрай не рекомендовано.Будьте уважні з кодуванням, оскільки ці помилки дуже складно знайти. Тому рекомендується завжди жорстко вказувати необхідне кодування та використовувати відповідні функції.
#ТипиданихPHP
