PHP
Вывод значения переменной
Поиск…
Вступление
Чтобы создать динамическую и интерактивную PHP-программу, полезно выводить переменные и их значения. Язык PHP позволяет использовать несколько методов вывода значений. В этом разделе рассматриваются стандартные методы печати значения в PHP и где эти методы могут быть использованы.
замечания
Переменные в PHP бывают разных типов. В зависимости от варианта использования вы можете вывести их в браузер как отображаемый HTML, вывести их для отладки или вывести их на терминал (при запуске приложения через командную строку).
Ниже приведены некоторые из наиболее часто используемых методов и языковых конструкций для вывода переменных:
-
echo
- выводит одну или несколько строк -
print
-print
строку и возвращает1
(всегда) -
printf
- выводит форматированную строку и возвращает длину выводимой строки -
sprintf
- Форматирует строку и возвращает форматированную строку -
print_r
- выводит или возвращает содержимое аргумента как удобочитаемой строки -
var_dump
-var_dump
удобочитаемую отладочную информацию о содержимом аргумента (ов), включая его тип и значение -
var_export
-var_export
или возвращает строковый рендеринг переменной как действительный PHP-код, который можно использовать для воссоздания значения.
Примечание. При попытке вывода объекта в виде строки PHP попытается преобразовать его в строку (путем вызова
__toString()
- если объект имеет такой метод). Если недоступно, ошибка, аналогичнаяObject of class [CLASS] could not be converted to string
будет показана. В этом случае вам придется дополнительно осмотреть объект, смотри: output-a-structured-view-of-arrays-and-objects .
эхо и печать
echo
и print
- это языковые конструкции, а не функции. Это означает, что они не требуют круглых скобок вокруг аргумента, как функция (хотя всегда можно добавлять круглые скобки вокруг почти любого выражения PHP, и, следовательно, echo("test")
тоже не повредит). Они выводят строковое представление переменной, константы или выражения. Они не могут использоваться для печати массивов или объектов.
Назначьте строку
Joel
переменной$name
$name = "Joel";
Вывести значение $ name с помощью
echo
&print
echo $name; #> Joel print $name; #> Joel
Скобки не требуются, но могут использоваться
echo($name); #> Joel print($name); #> Joel
Использование нескольких параметров (только
echo
)echo $name, "Smith"; #> JoelSmith echo($name, " ", "Smith"); #> Joel Smith
print
, в отличие отecho
, является выражением (оно возвращает1
) и, следовательно, может использоваться в других местах:print("hey") && print(" ") && print("you"); #> you11
Вышеупомянутое эквивалентно:
print ("hey" && (print (" " && print "you"))); #> you11
Сокращенное обозначение для echo
Когда вне PHP-тегов , по умолчанию используется сокращенная нотация для echo
, используя <?=
Для начала вывода и ?>
Чтобы закончить ее. Например:
<p><?=$variable?></p>
<p><?= "This is also PHP" ?></p>
Обратите внимание, что завершение отсутствует ;
, Это работает, потому что закрывающий тег PHP действует как ограничитель для одного оператора. Таким образом, в этой сокращенной нотации принято опускать точку с запятой.
Приоритет print
Хотя print
- это языковая конструкция, она имеет приоритет, такой как оператор. Он помещает между =
+=
-=
*=
**=
/=
.=
%=
&=
И and
операторами и оставил ассоциацию. Пример:
echo '1' . print '2' + 3; //output 511
Тот же пример с скобками:
echo '1' . print ('2' + 3); //output 511
Различия между echo
и print
Короче говоря, существуют два основных отличия:
-
print
принимает только один параметр, в то время какecho
может иметь несколько параметров. -
print
возвращает значение, поэтому его можно использовать как выражение.
Вывод структурированного представления массивов и объектов
print_r()
- Вывод массивов и объектов для отладки
print_r
выводит человеческий читаемый формат массива или объекта.
У вас может быть переменная, которая представляет собой массив или объект. Попытка вывести его с помощью echo
вызовет ошибку:
Notice: Array to string conversion
. Вместо этого вы можете использовать функцию print_r
чтобы сбрасывать человеческий читаемый формат этой переменной.
Вы можете передать true как второй параметр, чтобы вернуть содержимое в виде строки.
$myobject = new stdClass();
$myobject->myvalue = 'Hello World';
$myarray = [ "Hello", "World" ];
$mystring = "Hello World";
$myint = 42;
// Using print_r we can view the data the array holds.
print_r($myobject);
print_r($myarray);
print_r($mystring);
print_r($myint);
Это обеспечивает следующее:
stdClass Object
(
[myvalue] => Hello World
)
Array
(
[0] => Hello
[1] => World
)
Hello World
42
Кроме того, вывод print_r
может быть захвачен как строка, а не просто эхом. Например, следующий код сбрасывает форматированную версию $myarray
в новую переменную:
$formatted_array = print_r($myarray, true);
Обратите внимание: если вы просматриваете вывод PHP в браузере и интерпретируете его как HTML, то разрывы строк не будут отображаться, а вывод будет гораздо менее разборчивым, если вы не сделаете что-то вроде
echo '<pre>' . print_r($myarray, true) . '</pre>';
Открытие исходного кода страницы также будет форматировать вашу переменную таким же образом без использования
<pre>
.
В качестве альтернативы вы можете указать браузеру, что вы выводите текст, а не HTML:
header('Content-Type: text/plain; charset=utf-8');
print_r($myarray);
var_dump()
- var_dump()
человеком, для отладки информации о содержимом аргумента (ов), включая его тип и значение
Вывод более подробный по сравнению с print_r
поскольку он также выводит тип переменной вместе со своим значением и другой информацией, такой как идентификаторы объектов, размеры массива, длины строк, ссылочные маркеры и т. Д.
Вы можете использовать var_dump
для вывода более детальной версии для отладки.
var_dump($myobject, $myarray, $mystring, $myint);
Вывод более подробный:
object(stdClass)#12 (1) {
["myvalue"]=>
string(11) "Hello World"
}
array(2) {
[0]=>
string(5) "Hello"
[1]=>
string(5) "World"
}
string(11) "Hello World"
int(42)
Примечание . Если вы используете xDebug в своей среде разработки, выход var_dump по умолчанию ограничен или усечен. Дополнительную информацию о вариантах для изменения см. В официальной документации .
var_export()
- var_export()
действительный код PHP
var_export()
сбрасывает var_export()
представление элемента PHP
.
Вы можете передать true как второй параметр, чтобы вернуть содержимое в переменную.
var_export($myarray);
var_export($mystring);
var_export($myint);
Результат действителен PHP-код:
array (
0 => 'Hello',
1 => 'World',
)
'Hello World'
42
Чтобы поместить содержимое в переменную, вы можете сделать это:
$array_export = var_export($myarray, true);
$string_export = var_export($mystring, true);
$int_export = var_export($myint, 1); // any `Truthy` value
После этого вы можете выводить его следующим образом:
printf('$myarray = %s; %s', $array_export, PHP_EOL);
printf('$mystring = %s; %s', $string_export, PHP_EOL);
printf('$myint = %s; %s', $int_export, PHP_EOL);
Это приведет к следующему результату:
$myarray = array (
0 => 'Hello',
1 => 'World',
);
$mystring = 'Hello World';
$myint = 42;
printf vs sprintf
printf
выводит форматированную строку с использованием заполнителей
sprintf
вернет форматированную строку
$name = 'Jeff';
// The `%s` tells PHP to expect a string
// ↓ `%s` is replaced by ↓
printf("Hello %s, How's it going?", $name);
#> Hello Jeff, How's it going?
// Instead of outputting it directly, place it into a variable ($greeting)
$greeting = sprintf("Hello %s, How's it going?", $name);
echo $greeting;
#> Hello Jeff, How's it going?
Также возможно форматировать число с этими двумя функциями. Это можно использовать для форматирования десятичного значения, используемого для представления денег, чтобы оно всегда имело две десятичные цифры.
$money = 25.2;
printf('%01.2f', $money);
#> 25.20
Две функции vprintf
и vsprintf
работают как printf
и sprintf
, но принимают строку формата и массив значений вместо отдельных переменных.
Конкатенация строк с эхом
Вы можете использовать конкатенацию для объединения строк «от конца до конца» при их выводе (например, с echo
или print
).
Вы можете объединить переменные с помощью .
(Период / точка).
// String variable
$name = 'Joel';
// Concatenate multiple strings (3 in this example) into one and echo it once done.
// 1. ↓ 2. ↓ 3. ↓ - Three Individual string items
echo '<p>Hello ' . $name . ', Nice to see you.</p>';
// ↑ ↑ - Concatenation Operators
#> "<p>Hello Joel, Nice to see you.</p>"
Подобно конкатенации, echo
(при использовании без круглых скобок) можно использовать для объединения строк и переменных вместе (вместе с другими произвольными выражениями) с использованием запятой (,).
$itemCount = 1;
echo 'You have ordered ', $itemCount, ' item', $itemCount === 1 ? '' : 's';
// ↑ ↑ ↑ - Note the commas
#> "You have ordered 1 item"
Конкатенация строк против передачи нескольких аргументов для эха
Передача нескольких аргументов команде echo более выгодна, чем конкатенация строк в некоторых случаях. Аргументы записываются на выходе в том же порядке, в каком они передаются.
echo "The total is: ", $x + $y;
Проблема с конкатенацией заключается в том, что период .
имеет преимущество в выражении. Если оно конкатенировано, для правильного поведения вышеуказанное выражение требует дополнительных скобок. Приоритет этого периода также влияет на троичных операторов.
echo "The total is: " . ($x + $y);
Вывод больших целых чисел
В 32- PHP_INT_MAX
системах целые числа, большие, чем PHP_INT_MAX
, автоматически преобразуются в float. Вывод их в виде целочисленных значений (т.е. ненаучных обозначений) можно выполнить с помощью printf
, используя представление float
, как показано ниже:
foreach ([1, 2, 3, 4, 5, 6, 9, 12] as $p) {
$i = pow(1024, $p);
printf("pow(1024, %d) > (%7s) %20s %38.0F", $p, gettype($i), $i, $i);
echo " ", $i, "\n";
}
// outputs:
pow(1024, 1) integer 1024 1024 1024
pow(1024, 2) integer 1048576 1048576 1048576
pow(1024, 3) integer 1073741824 1073741824 1073741824
pow(1024, 4) double 1099511627776 1099511627776 1099511627776
pow(1024, 5) double 1.1258999068426E+15 1125899906842624 1.1258999068426E+15
pow(1024, 6) double 1.1529215046068E+18 1152921504606846976 1.1529215046068E+18
pow(1024, 9) double 1.2379400392854E+27 1237940039285380274899124224 1.2379400392854E+27
pow(1024, 12) double 1.3292279957849E+36 1329227995784915872903807060280344576 1.3292279957849E+36
Примечание: следите за точностью поплавка, что не бесконечно!
Хотя это выглядит хорошо, на этом надуманном примере все числа могут быть представлены как двоичное число, так как все они имеют мощность 1024 (и, следовательно, 2). См. Например:
$n = pow(10, 27);
printf("%s %.0F\n", $n, $n);
// 1.0E+27 1000000000000000013287555072
Выведите многомерный массив с индексом и значением и напечатайте в таблице
Array
(
[0] => Array
(
[id] => 13
[category_id] => 7
[name] => Leaving Of Liverpool
[description] => Leaving Of Liverpool
[price] => 1.00
[virtual] => 1
[active] => 1
[sort_order] => 13
[created] => 2007-06-24 14:08:03
[modified] => 2007-06-24 14:08:03
[image] => NONE
)
[1] => Array
(
[id] => 16
[category_id] => 7
[name] => Yellow Submarine
[description] => Yellow Submarine
[price] => 1.00
[virtual] => 1
[active] => 1
[sort_order] => 16
[created] => 2007-06-24 14:10:02
[modified] => 2007-06-24 14:10:02
[image] => NONE
)
)
Вывод многомерного массива с индексом и значением в таблице
<table>
<?php
foreach ($products as $key => $value) {
foreach ($value as $k => $v) {
echo "<tr>";
echo "<td>$k</td>"; // Get index.
echo "<td>$v</td>"; // Get value.
echo "</tr>";
}
}
?>
</table>