@@ -264,6 +264,63 @@ echo (new Text($input))
264264> ** Обратите внимание на иммутабельность.**
265265> Каждый шаг возвращает новый объект при котором не будет скрытых побочных эффектов.
266266
267+ ### Конкатенация строк
268+
269+ Соединение строк с помощью оператора ` . ` кажется простым, но быстро теряет читаемость, особенно при длинных сообщениях или множестве переменных:
270+
271+ ``` php
272+ // Плохо [✗]
273+ $message = 'Hello, ' . $name . '! Today is ' . date('Y-m-d');
274+ ```
275+
276+ При большом количестве переменных сложно сразу понять, как будет выглядеть итоговая строка.
277+ Чтобы избежать этого, можно использовать шаблон с подстановкой, например ` sprintf ` :
278+
279+ ``` php
280+ // Хорошо [✓]
281+ $message = sprintf(
282+ 'Hello, %s! Today is %s',
283+ $name,
284+ date('Y-m-d')
285+ );
286+ ```
287+
288+ Такой подход делает структуру строки прозрачной и упрощает её поддержку.
289+
290+
291+ ### Регулярные выражения
292+
293+ Регулярные выражения часто превращаются в «магические строки»:
294+
295+ ``` php
296+ // Плохо [✗]
297+ if (preg_match('/^(\d{4})-(\d{2})-(\d{2})$/', $date, $matches)) {
298+ $year = $matches[1];
299+ $month = $matches[2];
300+ $day = $matches[3];
301+ }
302+ ```
303+
304+ Через месяц уже непонятно, что означает каждая группа.
305+ И код начинает становиться путанным и явно обращаться к числовому индексу.
306+
307+ По возможности, следует использовать именованные группы:
308+
309+ ``` php
310+ // Хорошо [✓]
311+ if (preg_match(
312+ '/^(?<year >\d{4})-(?<month >\d{2})-(?<day >\d{2})$/',
313+ $date,
314+ $matches
315+ )) {
316+ $year = $matches['year'];
317+ $month = $matches['month'];
318+ $day = $matches['day'];
319+ }
320+ ```
321+
322+ Теперь каждая часть регулярного выражения имеет понятное имя, и при чтении кода сразу ясно, что именно извлекается.
323+
267324
268325### Ссылки делают код хрупким
269326
0 commit comments