PHP
Emissione del valore di una variabile
Ricerca…
introduzione
Per costruire un programma PHP dinamico e interattivo, è utile generare le variabili e i loro valori. Il linguaggio PHP consente più metodi di output del valore. Questo argomento tratta i metodi standard di stampa di un valore in PHP e dove questi metodi possono essere utilizzati.
Osservazioni
Le variabili in PHP sono disponibili in una varietà di tipi. A seconda del caso d'uso, potresti volerli esportare nel browser come render HTML, inviarli per il debug o inviarli al terminale (se stai eseguendo un'applicazione tramite la riga di comando).
Di seguito sono riportati alcuni dei metodi e dei costrutti del linguaggio più comunemente utilizzati per generare le variabili:
-
echo
- Emette una o più stringhe -
print
- Emette una stringa e restituisce1
(sempre) -
printf
- Emette una stringa formattata e restituisce la lunghezza della stringa emessa -
sprintf
- Formatta una stringa e restituisce la stringa formattata -
print_r
- Emette o restituisce il contenuto dell'argomento come una stringa leggibile dall'uomo -
var_dump
- Emette informazioni di debug leggibili dal punto di vista umano sul contenuto degli argomenti, inclusi il tipo e il valore -
var_export
- Emette o restituisce un rendering di stringa della variabile come codice PHP valido, che può essere utilizzato per ricreare il valore.
Nota: quando si tenta di generare un oggetto come stringa, PHP proverà a convertirlo in una stringa (chiamando
__toString()
- se l'oggetto ha un tale metodo). Se non disponibile, verrà mostrato un errore simile aObject of class [CLASS] could not be converted to string
. In questo caso, dovrai ispezionare ulteriormente l'oggetto, vedi: outputting-a-structured-view-of-array-and-objects .
eco e stampa
echo
e print
sono costrutti linguistici, non funzioni. Ciò significa che non richiedono parentesi attorno all'argomento come fa una funzione (anche se è sempre possibile aggiungere parentesi attorno a quasi tutte le espressioni PHP e quindi echo("test")
non farà alcun danno). Eseguono la rappresentazione della stringa di una variabile, di una costante o di un'espressione. Non possono essere utilizzati per stampare matrici o oggetti.
Assegna la stringa
Joel
alla variabile$name
$name = "Joel";
Emetti il valore di $ name usando
echo
eprint
echo $name; #> Joel print $name; #> Joel
Le parentesi non sono obbligatorie, ma possono essere utilizzate
echo($name); #> Joel print($name); #> Joel
Utilizzo di più parametri (solo
echo
)echo $name, "Smith"; #> JoelSmith echo($name, " ", "Smith"); #> Joel Smith
print
, a differenza diecho
, è un'espressione (restituisce1
) e quindi può essere utilizzata in più punti:print("hey") && print(" ") && print("you"); #> you11
Quanto sopra è equivalente a:
print ("hey" && (print (" " && print "you"))); #> you11
Notazione abbreviata per echo
Al di fuori dei tag PHP , una notazione abbreviata per echo
è disponibile per impostazione predefinita, utilizzando <?=
Per iniziare l'output e ?>
Per terminarlo. Per esempio:
<p><?=$variable?></p>
<p><?= "This is also PHP" ?></p>
Si noti che non c'è terminazione ;
. Questo funziona perché il tag PHP di chiusura funge da terminatore per la singola istruzione. Quindi, è normale omettere il punto e virgola in questa notazione abbreviata.
Priorità della print
Sebbene la print
sia una costruzione linguistica, ha priorità come operatore. Mette tra =
+=
-=
*=
**=
/=
.=
%=
&=
and
operatori e ha lasciato l'associazione. Esempio:
echo '1' . print '2' + 3; //output 511
Stesso esempio con parentesi:
echo '1' . print ('2' + 3); //output 511
Differenze tra echo
e print
In breve, ci sono due differenze principali:
-
print
richiede solo un parametro, mentre l'echo
può avere più parametri. -
print
restituisce un valore, quindi può essere usato come espressione.
Uscita di una vista strutturata di matrici e oggetti
print_r()
- Emissione di array e oggetti per il debug
print_r
emetterà un formato leggibile da un oggetto o un array.
Potresti avere una variabile che è una matrice o un oggetto. Cercando di emetterlo con un echo
verrà generato l'errore:
Notice: Array to string conversion
. Puoi invece usare la funzione print_r
per scaricare un formato leggibile da umani di questa variabile.
È possibile passare true come secondo parametro per restituire il contenuto come stringa.
$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);
Questo produce quanto segue:
stdClass Object
(
[myvalue] => Hello World
)
Array
(
[0] => Hello
[1] => World
)
Hello World
42
Inoltre, l'output di print_r
può essere catturato come una stringa, piuttosto che semplicemente echeggiato. Ad esempio, il seguente codice eseguirà il dump della versione formattata di $myarray
in una nuova variabile:
$formatted_array = print_r($myarray, true);
Nota che se stai visualizzando l'output di PHP in un browser, ed è interpretato come HTML, le interruzioni di riga non verranno mostrate e l'output sarà molto meno leggibile a meno che tu non faccia qualcosa di simile
echo '<pre>' . print_r($myarray, true) . '</pre>';
L'apertura del codice sorgente di una pagina formatterà anche la tua variabile allo stesso modo senza l'uso del tag
<pre>
.
In alternativa puoi dire al browser che ciò che stai trasmettendo è testo normale e non HTML:
header('Content-Type: text/plain; charset=utf-8');
print_r($myarray);
var_dump()
- var_dump()
informazioni di debug leggibili dal punto di vista del contenuto degli argomenti, inclusi il tipo e il valore
L'output è più dettagliato rispetto a print_r
perché emette anche il tipo della variabile insieme al suo valore e altre informazioni come gli ID oggetto, le dimensioni dell'array, le lunghezze delle stringhe, gli indicatori di riferimento, ecc.
È possibile utilizzare var_dump
per generare una versione più dettagliata per il debug.
var_dump($myobject, $myarray, $mystring, $myint);
L'output è più dettagliato:
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)
Nota : se si utilizza xDebug nell'ambiente di sviluppo, l'output di var_dump è limitato / troncato per impostazione predefinita. Vedi la documentazione ufficiale per maggiori informazioni sulle opzioni per cambiarlo.
var_export()
- var_export()
codice PHP
valido
var_export()
scarica una rappresentazione var_export()
PHP
dell'elemento.
È possibile passare true come secondo parametro per restituire il contenuto in una variabile.
var_export($myarray);
var_export($mystring);
var_export($myint);
L'output è un codice PHP valido:
array (
0 => 'Hello',
1 => 'World',
)
'Hello World'
42
Per inserire il contenuto in una variabile, puoi farlo:
$array_export = var_export($myarray, true);
$string_export = var_export($mystring, true);
$int_export = var_export($myint, 1); // any `Truthy` value
Dopo di ciò, puoi farlo in questo modo:
printf('$myarray = %s; %s', $array_export, PHP_EOL);
printf('$mystring = %s; %s', $string_export, PHP_EOL);
printf('$myint = %s; %s', $int_export, PHP_EOL);
Questo produrrà il seguente risultato:
$myarray = array (
0 => 'Hello',
1 => 'World',
);
$mystring = 'Hello World';
$myint = 42;
printf vs sprintf
printf
restituendo una stringa formattata utilizzando segnaposti
sprintf
restituirà la stringa formattata
$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?
È anche possibile formattare un numero con queste 2 funzioni. Questo può essere usato per formattare un valore decimale usato per rappresentare il denaro in modo che abbia sempre 2 cifre decimali.
$money = 25.2;
printf('%01.2f', $money);
#> 25.20
Le due funzioni vprintf
e vsprintf
funzionano come printf
e sprintf
, ma accettano una stringa di formato e una matrice di valori, anziché singole variabili.
Concatenazione di stringhe con eco
È possibile utilizzare la concatenazione per unire le stringhe "end to end" durante l'output (con echo
o print
ad esempio).
È possibile concatenare le variabili utilizzando a .
(Periodo / dot).
// 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>"
Simile alla concatenazione, echo
(se usato senza parentesi) può essere usato per combinare stringhe e variabili insieme (insieme ad altre espressioni arbitrarie) usando una virgola (,).
$itemCount = 1;
echo 'You have ordered ', $itemCount, ' item', $itemCount === 1 ? '' : 's';
// ↑ ↑ ↑ - Note the commas
#> "You have ordered 1 item"
Concatenazione di stringhe e passaggio di più argomenti a echo
Passare più argomenti al comando echo è più vantaggioso della concatenazione di stringhe in alcune circostanze. Gli argomenti vengono scritti nell'output nello stesso ordine in cui vengono inoltrati.
echo "The total is: ", $x + $y;
Il problema con la concatenazione è che il periodo .
ha la precedenza nell'espressione. Se concatenato, l'espressione sopra ha bisogno di parentesi aggiuntive per il comportamento corretto. La precedenza del periodo riguarda anche gli operatori ternari.
echo "The total is: " . ($x + $y);
Uscita di numeri interi grandi
Sui sistemi a 32 bit, gli interi maggiori di PHP_INT_MAX
vengono automaticamente convertiti in float. L'output di questi come valori interi (cioè notazione non scientifica) può essere fatto con printf
, usando la rappresentazione float
, come illustrato di seguito:
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
Nota: fai attenzione alla precisione del galleggiante, che non è infinita!
Mentre questo sembra bello, in questo esempio forzato i numeri possono essere tutti rappresentati come un numero binario dal momento che sono tutti i poteri di 1024 (e quindi 2). Vedi ad esempio:
$n = pow(10, 27);
printf("%s %.0F\n", $n, $n);
// 1.0E+27 1000000000000000013287555072
Emetti una matrice multidimensionale con indice e valore e stampa nella tabella
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
)
)
Matrice multidimensionale di output con indice e valore nella tabella
<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>