PHP
Wyprowadzanie wartości zmiennej
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 zwraca1
(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 doObject 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
iprint
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 doecho
, jest wyrażeniem (zwraca1
), 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, aecho
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()
- Wyprowadzanie tablic i obiektów do debugowania
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>