Вывод из программы на PHP*
Чаще всего результат работы программы на PHP выводится при помощи команды: echo() или функции: print().
Пример:
<?php
$var1 = "Строковая переменная";
$var2 = 99.65;
$var3 = -76.98;
echo "var1: $var1 <br>","var2: $var2 <br>", "var3: $var3 <br>";
?>
Результат:
var1: Строковая переменная
var2: 99.65
var3: -76.98
При отладке программы часто используются функции: var_dump() и print_r().
Пример:
<?php
$var1 = "Строковая переменная";
$ar1 = [1,2,3,4,5,6];
$ar2 = [1,[11,12,13,14],3,4,5,6];
print_r ($var1);
echo "<br>";
print_r ($ar1);
echo "<br>";
print_r ($ar2);
echo "<br>";
var_dump ($ar1);
echo "<br>";
var_dump ($ar2);
echo "<br>";
?>
Результат:
Строковая переменная
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
Array ( [0] => 1 [1] =>
Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 ) [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
F:\Lessons\Tests\PHP\PHP_05-2output.php:11:
array (size=6)
0 => int 1
1 => int 2
2 => int 3
3 => int 4
4 => int 5
5 => int 6
F:\Lessons\Tests\PHP\PHP_05-2output.php:13:
array (size=6)
0 => int 1
1 =>
array (size=4)
0 => int 11
1 => int 12
2 => int 13
3 => int 14
2 => int 3
3 => int 4
4 => int 5
5 => int 6
Форматируемый вывод
Часто возникает необходимость форматирования текстовой строки при вводе-выводе. Для этого PHP использует ряд функций, позволяющих предварительно отформатировать строку, наложтв на неё некоторый шаблон - специальную строку формата.
Это, например, функции: printf(), vprintf(), vsprintf(), fprintf(), vfprintf().
В качестве аргумента эти функции используют строку форматирования и набор переменных, которые нужно отформатировать.
Например: sprintf(format,arg1,arg2,arg++).
Спецификаторы формата
Строка формата состоит из:
- обычных символов (за исключением %), которые копируются напрямую в результирующую строку, и
- спецификаторов формата.
Каждый спецификатор формата применяется к соответствующей переменной. Результат выводится в результирующую строку. Такой способ форматирования строки вывода применяется в ряде PHP-функций, например:
sprintf(), printf()
Каждый спецификатор формата (описатель преобразования, форматирования) начинается со знака процент (%), за которым следует один или более дополнительных элементов . Структура строки - спецификатора формата:
%[num][sign][padding][alignment][width][.precision]type
где:
- num - необязательный номер аргумента, который должен форматироваться этим спецификатором формата. Если номер не указан, то аргументы форматируются спецификаторами формата в порядке их следования
- sign - необязательный описатель знака, указывающий как использовать знак (- или +) в префиксе числа. По умолчанию, используется только знак минус, если число отрицательное. Использование знака "+" приводит к печати знака плюс перед положительными числами
- padding - необязательный символ-заполнитель, который определяет, какой символ будет использоваться для дополнения результата до необходимой длины. Это может быть пробел или 0. По умолчанию используется пробел. Альтернативный символ может быть указан с помощью одиночной кавычки (')
- alignment - необязательный описатель выравнивания, определяющий выравнивание по левой или правой границе. По умолчанию выравнивается вправо, - используется для выравнивания влево
- width - необязательное число, описатель ширины, определяющий минимальное число символов, которое будет содержать результат преобразования
- precision - необязательный описатель точности, указанный в виде точки (.), после которой следует необязательная строка из десятичных чисел, определяющая, сколько десятичных разрядов отображать для чисел с плавающей точкой. При использовании со строками этот описатель выступает в роли обрезающей точки, устанавливающей максимальный лимит символов. Также между точкой и цифрой можно указать символ, используемый при дополнении числа
- type - Описатель типа, определяющий, как интерпретировать тип данных форматируемой переменной.
Допустимые типы:
- % - символ процента. Аргумент не используется.
- b - аргумент трактуется как целое и выводится в виде двоичного числа.
- c - аргумент трактуется как целое и выводится в виде символа с соответствующим кодом ASCII.
- d - аргумент трактуется как целое и выводится в виде десятичного числа со знаком.
- e - аргумент трактуется как число в в научной нотации (например, 1.2e+2). Описатель точности указывает на количество знаков после запятой, начиная с версии PHP 5.2.1. В более ранних версиях он обозначал количество значащих цифр (на один знак меньше).
- E - аналогично %e, но использует заглавную букву (например, 1.2E+2).
- f - аргумент трактуется как число с плавающей точкой и также выводится в зависимости от локали.
- F - аргумент трактуется как число с плавающей точкой и также выводится, но без зависимости от локали. Доступно, начиная с версии PHP 5.0.3.
- g - выбирает самую краткую запись из %e и %f.
- G - выбирает самую краткую запись из %E и %f.
- o - аргумент трактуется как целое и выводится в виде восьмеричного числа.
- s - аргумент трактуется как строка.
- u - аргумент трактуется как целое и выводится в виде десятичного числа без знака.
- x - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в нижнем регистре).
- X - аргумент трактуется как целое и выводится в виде шестнадцатеричного числа (в верхнем регистре).
Переменные будут преобразованы в соответвующий тип для спецификатора:
Преобразование типов
Тип |
Спецификатор |
string |
s |
integer |
d, u, c, o, x, X, b |
double |
g, G, e, E, f, F |
Попытка использовать комбинацию строк и спецификаторов ширины с кодировками, которые требуют более одного байта на символ, может привести к неожиданным результатам.
Пример:
<?php
$var1 = "Строковая переменная";
$var2 = 99.65;
$var3 = -76.98;
var_dump ($var1);
var_dump ($var2);
var_dump ($var3);
echo ("Примеры использования функции printf()<br>");
printf("var1: %s <br>",$var1);
printf("var2: %f <br>",$var2);
printf("var2: %.0f <br>var3: %.5f <br><br> ",$var2,$var3);
printf("%%b = %08b <br>",$var2); // Binary number - 8 symbols, emty fields filled with 0
printf("%%d = %d <br>",$var2); // Signed decimal number
printf("%%d = %d <br>",$var2); // Signed decimal number
printf("%%e = %e <br>",$var2); // Scientific notation (lowercase)
printf("%%E = %E <br>",$var2); // Scientific notation (uppercase)
printf("%%u = %u <br>",$var2); // Unsigned decimal number (positive)
printf("%%u = %u <br>",$var2); // Unsigned decimal number (negative)
printf("%%f = %f <br>",$var2); // Floating-point number (local settings aware)
printf("%%F = %F <br>",$var2); // Floating-point number (not local settings aware)
printf("%%g = %g <br>",$var2); // Shorter of %e and %f
printf("%%G = %G <br>",$var2); // Shorter of %E and %f
printf("%%o = %o <br>",$var2); // Octal number
printf("%%s = %s <br>",$var2); // String
printf("%%x = %x <br>","10"); // Hexadecimal number (lowercase)
printf("%%X = %X <br>","15"); // Hexadecimal number (uppercase)
printf("%%+d = %+d <br>",$var2); // Sign specifier (positive)
?>
Результат:
F:\Lessons\Tests\PHP\PHP_05-3output.php:5:string 'Строковая переменная' (length=39)
F:\Lessons\Tests\PHP\PHP_05-3output.php:6:float 99.65
F:\Lessons\Tests\PHP\PHP_05-3output.php:7:float -76.98
Примеры использования функции printf()
var1: Строковая переменная
var2: 99.650000
var2: 100
var3: -76.98000
%b = 01100011
%d = 99
%d = 99
%e = 9.965000e+1
%E = 9.965000E+1
%u = 99
%u = 99
%f = 99.650000
%F = 99.650000
%g = 99.65
%G = 99.65
%o = 143
%s = 99.65
%x = a
%X = F
%+d = +99
Пример:
<?php
echo "Символ-заполнитель для строки - * <br>";
$card = '4025888888881881';
printf("Номер Вашей кредитной карты: %'*16s", substr($card, -4));
echo "<br><br>Изменение порядка параметров";
$var1 = -11.98;
$var2 = -22.98;
$format = '<br> var1 %d, var2 %f';
echo "<br><br>Строка format:". $format ;
echo sprintf($format, $var1, $var2);
$format = '<br> var2 %2$d, var1 %1$f';
echo "<br><br>Строка format:". $format ;
echo sprintf($format, $var1, $var2);
?>
Результат:
Символ-заполнитель для строки - *
Номер Вашей кредитной карты: ************1881
Изменение порядка параметров
Строка format:
var1 %d, var2 %f
var1 -11, var2 -22.980000
Строка format:
var2 %2$d, var1 %1$f
var2 -22, var1 -11.980000