PHP sprintf: форматирование и обработка строк
Функция PHP sprintf позволяет преобразовать и разместить некоторое количество аргументов в одной строке символов. Спецификаторы форматирования позволяют работать с символами, строками, целыми и вещественными числами.
Применение функции востребовано для оформления табличной информации и создания шаблонов. Может быть использовано для предварительной формализации исходных данных в определенной структуре, изменения их содержания или последовательности.
Синтаксис функции PHP sprintf()
Результат функции – строка символов, сформированная в определенной последовательности из конкретных данных, параметры функции:
- строка форматирования;
- список аргументов.
Для форматирования можно использовать любую конструкцию и логику, включая теги HTML. Хотя нет никаких ограничений на применение sprintf, руководство по PHP определяет спецификаторы преобразования в большей степени к числовой информации.
Элемент формата начинается с символа % и заканчивается символом спецификатора. Большая часть возможностей форматирования лежит в области числовой информации. Очень практична возможность преобразовать число в двоичный и шестнадцатеричный форматы. Здесь функции sprintf на PHP вряд ли стоит писать замену.
В приведенном примере особенно выделено правило именования аргументов и отличия спецификатора x от X. Правильное использование ссылок на последовательность аргументов, которые форматируются, имеет значение для правильного результата. Нумерация всегда начинается с 1.
Последовательность использования ссылок не имеет значения, но важно помнить: PHP функция sprintf все элементы % (без указания номера аргумента) рассматривает последовательно в общем списке. К нумерации общего списка никакого отношения не имеет ни количество, ни последовательность элементов %, указанных с конкретными номерами параметров.
Описание примера применения sprintf в PHP
Если управлять аргументом в виде строки нет прямой возможности, то управлять строкой формата и выводом в строку результата цифровой информации не представляет проблемы.
В первых двух строках примера (вывод аргументов Arg1, Arg2c и Arg2p) первый аргумент – строка (наименование позиции) выводится как есть. Третий аргумент занимает в выводе 12 (14) символов. Первая строка выравнивает число слева нулями до общей длины 12 символов. После точки четыре символа. Вторая строка выравнивает число справа (дробную часть) до 14 символов. Признаком, что нужно выполнять выравнивание справа, служит символ -.
Строка форматирования – это обычная строка символов. В нее можно вставлять вычисляемые выражения. В данном случае для выделения другого числа использованы вставки {$cL} и {$cR}. Это сделало строку форматирования нагляднее и упростило ее запись по всем примерам.
Формирование строки форматирования
Работа PHP на русском, или функция sprintf, – работа интерпретатора в естественной и удобной среде. Собственно, HTML-страница со вставками PHP-кода представляет собой любой контекст на любом языке. Это не та свобода, которую дает язык JavaScript в среде браузера.
Чтобы вывести русский контент на PHP, не нужно кодировать кириллицу, но иногда приходится использовать функцию преобразования iconv(). В любом случае все доступно и читабельно.
Текст вставки PHP-кода в HTML-страницу понятен и востребован. Применение в строке символов:
Значение переменной ABC={$ABC} единиц
Вставка {$ABC} имеет значение только один раз и выполняется тоже только один раз.
Особенность выполнения PHP-кода на странице
Интерпретатор только один раз просматривает страницу и только один раз заменяет вставки {$ABC} их значениями. Программист может, по своему усмотрению, применять фразу "только один раз", заставляя PHP многократно приближаться к нужному результату.
В любом случае, как только HTML-страница отправлена в браузер, в ней нет никакого PHP-кода.
Если элемент страницы из браузера инициировал контакт с сервером, он может запустить новый PHP-скрипт. Здесь вставки {$ABC} весьма относительны, и нет никакой гарантии правильного результата. Но применение в PHP sprintf – это динамика такой возможности.
Разработчик может не только получить желаемое исполнение такой вставки, но и изменить строку, в которую она будет передавать нужное значение.
Момент формирования контента
Использование потенциала PHP как средства формирования вставок в HTML-страницу, как инструмента формирования страницы целиком – естественно. С этого начинается сайт. Как только страница сформирована, а фактически на сайт пришел посетитель, то по современным представлениям:
- страницу менять нельзя;
- пользователя упускать тоже нельзя.
Фактически посетитель пришел на сайт и получил первый ответ в виде HTML-кода. Совершенно неправильно менять этот ответ – это означает сказать посетителю, что страница его меняет. Но реагировать на действия посетителя адекватно и по его инициативе страница обязана.
Приход посетителя – первый ответ. Действие посетителя – адекватная реакция страницы и ее подготовка ко всем предполагаемым следующим действиям посетителя.
Значительная доля ответственности за динамику страницы по инициативе посетителя ложится на JavaScript, но он функционирует только в браузере, а на сервер может отправлять только AJAX-запросы. Каждое обращение к серверу может запускать PHP-скрипт. Но момент формирования страницы и момент реакции на запрос существенно различаются.
Функция PHP sprintf – идеальное средство для динамического формирования шаблона ответа и заполнения его нужным значением.
Изменение PHP-кода в ходе исполнения
Идея динамики кода родилась вместе с первым языком программирования и сегодня присутствует в каждом современном языке программирования.
Выполнение кода посредством eval (строка кода) сегодня считается брешью в безопасности, но она настолько же востребована, насколько и опасна.
Чтобы изменить код в процессе исполнения, сегодня не обязательно пользоваться функцией eval(). Это скорее быстрый завтрак, выполнение одной-двух команд, нежели практичный фундамент для построения нужной динамики.
Функция PHP sprintf() позволяет проектировать шаблон скрипта, например кода объекта, который будет вызван при том или ином действии посетителя. Сложившаяся практика записывать тела объектов в виде независимых файлов – идеальное решение для их изменения в процессе работы сайта.
Использование инструментов работы со строками PHP, дополняющих функциональность sprintf() позволяет не только изменять используемые объекты в результате действий конкретного посетителя, но и переносить эту динамику на работу с другими посетителями: это развитие сайта, динамика его функциональности, накопление опыта работы и знаний.