Szukaj…


Wprowadzenie

Aby zbudować dynamiczny i interaktywny program PHP, przydatne jest wyświetlanie zmiennych i ich wartości. Język PHP pozwala na wiele metod generowania wartości. W tym temacie omówiono standardowe metody drukowania wartości w języku PHP oraz sposoby ich użycia.

Uwagi

Zmienne w PHP występują w różnych typach. W zależności od przypadku użycia, możesz wypisać je w przeglądarce jako renderowany HTML, wypisać do debugowania lub wypisać do terminala (jeśli uruchamiasz aplikację za pomocą wiersza poleceń).

Poniżej znajdują się niektóre z najczęściej używanych metod i konstrukcji języka do zmiennych wyjściowych:

  • echo - Wyprowadza jeden lub więcej ciągów
  • print - wyświetla ciąg znaków i zwraca 1 (zawsze)
  • printf - Wyprowadza sformatowany ciąg i zwraca długość wyprowadzanego ciągu
  • sprintf - formatuje ciąg i zwraca sformatowany ciąg
  • print_r - wyświetla lub zwraca treść argumentu jako ciąg czytelny dla człowieka
  • var_dump - wyświetla czytelne dla człowieka informacje debugujące o treści argumentów, w tym o ich typie i wartości
  • var_export - wyświetla lub zwraca ciąg renderowania zmiennej jako prawidłowy kod PHP, którego można użyć do odtworzenia wartości.

Uwaga: Próbując wyprowadzić obiekt jako ciąg znaków, PHP spróbuje przekonwertować go na ciąg znaków (wywołując __toString() - jeśli obiekt ma taką metodę). Jeśli jest niedostępny, zostanie wyświetlony błąd podobny do Object of class [CLASS] could not be converted to string . W takim przypadku będziesz musiał zbadać obiekt dalej, patrz: wyprowadzanie-ustrukturyzowanego-widoku-tablic-i-obiektów .

powtórz i wydrukuj

echo i print to konstrukcje językowe, a nie funkcje. Oznacza to, że nie wymagają nawiasów wokół argumentu, jak robi to funkcja (chociaż zawsze można dodawać nawiasy wokół prawie dowolnego wyrażenia PHP, a zatem echo("test") również nie zaszkodzi). Wyprowadzają ciąg reprezentujący zmienną, stałą lub wyrażenie. Nie można ich używać do drukowania tablic lub obiektów.

  • Przypisz ciąg Joel do zmiennej $name

    $name = "Joel";
    
  • Podaj wartość $ name za pomocą echo i print

    echo $name;   #> Joel
    print $name;  #> Joel
    
  • Nawiasy nie są wymagane, ale można ich użyć

    echo($name);  #> Joel
    print($name); #> Joel
    
  • Używanie wielu parametrów (tylko echo )

    echo $name, "Smith";       #> JoelSmith
    echo($name, " ", "Smith"); #> Joel Smith
    
  • print , w przeciwieństwie do echo , jest wyrażeniem (zwraca 1 ), a zatem może być używane w większej liczbie miejsc:

    print("hey") && print(" ") && print("you"); #> you11
    
  • Powyższe jest równoważne z:

    print ("hey" && (print (" " && print "you"))); #> you11
    

Skrótowa notacja echo

Gdy znajduje się poza znacznikami PHP , skrótowa notatka dla echo jest domyślnie dostępna, używając <?= Aby rozpocząć wyjście i ?> Aby go zakończyć. Na przykład:

<p><?=$variable?></p>    
<p><?= "This is also PHP" ?></p>

Zauważ, że nie ma zakończenia ; . Działa to, ponieważ zamykający znacznik PHP działa jako terminator pojedynczej instrukcji. Zatem w tym skróconym zapisie pomija się średnik.

Priorytet print

Mimo że print jest konstrukcją językową, ma priorytet jak operator. Umieszcza między = += -= *= **= /= .= %= &= I and operatorami i opuścił skojarzenie. Przykład:

echo '1' . print '2' + 3; //output 511

Ten sam przykład z nawiasami:

echo '1' . print ('2' + 3); //output 511

Różnice między echo a print

Krótko mówiąc, istnieją dwie główne różnice:

  • print zajmuje tylko jeden parametr, a echo może mieć wiele parametrów.
  • print zwraca wartość, więc może być użyte jako wyrażenie.

Wyprowadzanie ustrukturyzowanego widoku tablic i obiektów

print_r wyświetli czytelny dla człowieka format tablicy lub obiektu.

Możesz mieć zmienną, która jest tablicą lub obiektem. Próba wygenerowania go za pomocą echo spowoduje zgłoszenie błędu:
Notice: Array to string conversion . Zamiast tego możesz użyć funkcji print_r aby zrzucić format tej zmiennej czytelny dla człowieka.

Możesz przekazać true jako drugi parametr, aby zwrócić treść jako ciąg.

$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);

To powoduje, że:

stdClass Object
(
    [myvalue] => Hello World
)
Array
(
    [0] => Hello
    [1] => World
)
Hello World
42

Ponadto dane wyjściowe z print_r mogą zostać przechwycone jako ciąg, a nie po prostu powtórzone. Na przykład poniższy kod zrzuci sformatowaną wersję $myarray do nowej zmiennej:

$formatted_array = print_r($myarray, true);

Zauważ, że jeśli przeglądasz dane wyjściowe PHP w przeglądarce i jest on interpretowany jako HTML, wówczas podział wiersza nie będzie wyświetlany, a wynik będzie znacznie mniej czytelny, chyba że zrobisz coś takiego

echo '<pre>' . print_r($myarray, true) . '</pre>';

Otwarcie kodu źródłowego strony również sformatuje zmienną w ten sam sposób bez użycia znacznika <pre> .

Możesz też powiedzieć przeglądarce, że to, co wysyłasz, to zwykły tekst, a nie HTML:

header('Content-Type: text/plain; charset=utf-8');
print_r($myarray);

var_dump() - Wyświetla czytelne dla człowieka informacje debugowania dotyczące zawartości argumentów, w tym ich typu i wartości

Dane wyjściowe są bardziej szczegółowe w porównaniu do print_r ponieważ generuje również typ zmiennej wraz z jej wartością i innymi informacjami, takimi jak identyfikatory obiektów, rozmiary tablic, długości łańcuchów, znaczniki odniesienia itp.

Możesz użyć var_dump aby wyświetlić bardziej szczegółową wersję do debugowania.

var_dump($myobject, $myarray, $mystring, $myint);

Dane wyjściowe są bardziej szczegółowe:

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)

Uwaga : Jeśli używasz xDebug w swoim środowisku programistycznym, wyjście var_dump jest domyślnie ograniczone / obcięte. Zobacz oficjalną dokumentację, aby uzyskać więcej informacji na temat opcji, aby to zmienić.


var_export() - Wyprowadza prawidłowy kod PHP

var_export() zrzuca var_export() PHP reprezentacji elementu.

Możesz przekazać true jako drugi parametr, aby zwrócić zawartość do zmiennej.

var_export($myarray);
var_export($mystring);
var_export($myint);

Wyjściowy kod PHP jest poprawny:

array (
  0 => 'Hello',
  1 => 'World',
)
'Hello World'
42

Aby umieścić zawartość w zmiennej, możesz to zrobić:

$array_export = var_export($myarray, true);
$string_export = var_export($mystring, true);
$int_export = var_export($myint, 1); // any `Truthy` value

Następnie możesz wydrukować go w następujący sposób:

printf('$myarray = %s; %s', $array_export, PHP_EOL);
printf('$mystring = %s; %s', $string_export, PHP_EOL);
printf('$myint = %s; %s', $int_export, PHP_EOL);

Spowoduje to wygenerowanie następującego wyniku:

$myarray = array (
  0 => 'Hello',
  1 => 'World',
);
$mystring = 'Hello World';
$myint = 42;

printf vs sprintf

printf wyświetli sformatowany ciąg znaków za pomocą symboli zastępczych

sprintf zwróci sformatowany ciąg

$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?

Możliwe jest również sformatowanie liczby za pomocą tych 2 funkcji. Można go użyć do sformatowania wartości dziesiętnej używanej do przedstawienia pieniędzy, tak aby zawsze zawierała 2 cyfry dziesiętne.

$money = 25.2;
printf('%01.2f', $money);
#> 25.20

Dwie funkcje vprintf i vsprintf działają jako printf i sprintf , ale akceptują ciąg formatujący i tablicę wartości zamiast pojedynczych zmiennych.

Łączenie ciągów za pomocą echa

Za pomocą konkatenacji można łączyć łańcuchy „od końca do końca” podczas ich wyświetlania (na przykład za pomocą echo lub print ).

Możesz łączyć zmienne za pomocą . (kropka / kropka).

// 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>"

Podobnie jak w przypadku konkatenacji, echo (gdy jest używane bez nawiasów) może być używane do łączenia ciągów znaków i zmiennych (wraz z innymi dowolnymi wyrażeniami) za pomocą przecinka (,).

$itemCount = 1;

echo 'You have ordered ', $itemCount, ' item', $itemCount === 1 ? '' : 's';
//                      ↑           ↑        ↑                - Note the commas

#> "You have ordered 1 item"

Łączenie ciągów vs przekazywanie wielu argumentów do echa

Przekazywanie wielu argumentów do polecenia echo jest w niektórych okolicznościach bardziej korzystne niż konkatenacja łańcuchów. Argumenty są zapisywane na wyjściu w tej samej kolejności, w jakiej są przekazywane.

echo "The total is: ", $x + $y;

Problem z konkatenacją polega na tym, że okres . ma pierwszeństwo w wyrażeniu. Jeśli zostaną połączone, powyższe wyrażenie wymaga dodatkowych nawiasów do poprawnego zachowania. Pierwszeństwo okresu wpływa również na operatorów trójskładnikowych.

echo "The total is: " . ($x + $y);

Wyprowadzanie dużych liczb całkowitych

W systemach 32-bitowych liczby całkowite większe niż PHP_INT_MAX są automatycznie konwertowane na zmiennoprzecinkowe. Wyprowadzanie ich jako wartości całkowitych (tj. Notacja nienaukowa) można wykonać za pomocą printf , używając reprezentacji float , jak pokazano poniżej:

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

Uwaga: uważaj na precyzję pływaka, która nie jest nieskończona!

Chociaż wygląda to ładnie, w tym wymyślonym przykładzie liczby mogą być reprezentowane jako liczba binarna, ponieważ wszystkie są potęgami 1024 (a zatem 2). Zobacz na przykład:

$n = pow(10, 27);
printf("%s %.0F\n", $n, $n);
// 1.0E+27 1000000000000000013287555072

Wydrukuj tablicę wielowymiarową z indeksem i wartością i wydrukuj do tabeli

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 
        ) 

)  

Wyjściowa tablica wielowymiarowa z indeksem i wartością w tabeli

<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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow