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 restituisce 1 (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 a Object 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 e print

    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 di echo , è un'espressione (restituisce 1 ) 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 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>


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow