Поиск…


Вступление

Чтобы создать динамическую и интерактивную 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 выводит человеческий читаемый формат массива или объекта.

У вас может быть переменная, которая представляет собой массив или объект. Попытка вывести его с помощью 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>


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow