Вывод и форматирование
Программа общается с миром через вывод: текст страницы, строка отчёта, сообщение об ошибке. В PHP для этого есть несколько инструментов — от простого echo до шаблонов, которые выравнивают и округляют значения.
echo и print
echo выводит одно или несколько значений через запятую:
<?php
echo 'Привет', ', ', 'мир', "\n";
print "Вторая строка";print принимает только одно значение. В остальном они равнозначны, и почти всегда используют echo.
Многострочный текст
Длинный текст с переменными удобно записывать в виде heredoc. Он начинается с <<< и имени метки, а заканчивается той же меткой:
<?php
$name = 'Анна';
$total = 1250;
echo <<<TEXT
Здравствуйте, {$name}!
Сумма заказа: {$total} ₽.
TEXT;Если имя метки взять в одинарные кавычки, переменные не подставляются — текст выводится как есть:
<?php
echo <<<'TEXT'
Переменная $name здесь останется текстом.
TEXT;Шаблоны printf
printf() подставляет значения в шаблон на место меток, начинающихся с %:
<?php
printf("Товар: %s, цена: %d ₽\n", 'Чай', 250);
printf("Скидка: %.1f%%\n", 12.5);
printf("Номер заказа: %05d", 42);Программа выведет Товар: Чай, цена: 250 ₽, Скидка: 12.5% и Номер заказа: 00042.
| Метка | Значение |
|---|---|
%s | Строка |
%d | Целое число |
%f | Дробное число |
%.2f | Дробное с двумя знаками после запятой |
%05d | Целое, дополненное нулями до 5 знаков |
%% | Знак процента |
sprintf
sprintf() работает так же, но не выводит строку, а возвращает её:
<?php
$line = sprintf('%s — %.2f', 'Кофе', 399.5);
echo $line; // Кофе — 399.50Это удобно, когда строку нужно сохранить, передать в функцию или записать в файл.
Числа
number_format() округляет число и разделяет разряды:
<?php
echo number_format(1234567.891, 2, ',', ' '), "\n"; // 1 234 567,89
echo number_format(1234567.891), "\n"; // 1,234,568
echo str_pad('7', 3, '0', STR_PAD_LEFT); // 007Аргументы: число, знаков после запятой, разделитель дробной части, разделитель тысяч.
Отладочный вывод
Чтобы посмотреть, что лежит в переменной, используют print_r() и var_dump():
<?php
$user = ['name' => 'Анна', 'admin' => true];
print_r($user);
var_dump($user['admin']);print_r() показывает структуру массива, var_dump() — ещё и типы значений. echo для массива не годится: он выведет слово Array и предупреждение.
Частая ошибка
Метка %d отбрасывает дробную часть, а не округляет. Цена 19.99 превратится в 19:
<?php
printf("%d\n", 19.99); // 19
printf("%.2f", 19.99); // 19.99Для денег и других дробных чисел используйте %.2f или number_format().