2013-05-23 13 views
6

Il comando echo non restituisce nulla. Ma stampa restituisce 1. Sempre. Qual è l'uso pratico di questo ritorno 1? Sicuro che possa essere usato in un'espressione, ma non è l'espressione inutile se è sempre vero e causa l'uso di più codice?print() restituisce sempre 1, c'è un uso pratico?

<?php 
unset($empty); 
if(print ($empty)){ 
    echo "Yep sure thing. Print strikes again with a ", "1."; 
} 
?> 

Non dovrebbe tornare sempre lo stesso risultato come sotto, quindi qual è il punto, allora?

<?php 
print ($empty); 
echo "Yep sure thing. Print strikes again with a ", "1."; 
?> 

Questa domanda è di circa il rientrante 1 e non che "Echo permette riecheggiando più di una stringa separati da virgole, mentre la stampa non" ecc

risposta

3

print restituisce sempre uno nel mondo reale. Se stai cercando di eseguire Inception, puoi escogitare una funzione print che restituisce sempre zero. In questo modo, puoi verificare se sei in un sogno o nel mondo reale.

In realtà, tuttavia, l'utilizzo del valore di ritorno di print è lo stesso del semplice utilizzo di true. Infiniti cicli continui, stampa di informazioni di debug, ecc. Sono tutti usi molto interessanti ma sono di cattiva progettazione (quasi al limite) e dovrebbero essere evitati.

+0

haha ​​non so se questa risposta è stata votata per il consiglio su come programmare un inizio ... o un pratico per la funzione che non è assolutamente una buona idea da fare! ma ancora + 1 – MadDokMike

+0

Potrebbe essere un po 'di entrambi;) – ose

2

Dal momento che il risultato è sempre truthy, è possibile concatenare insieme in un'espressione come questo:

if (print('debug stuff') && $a == 1) { 
    // do stuff 
} elseif (print('debug another') && $a > 56) { 
    // do stuff 
} 

Poiché le condizioni vengono valutate funzionerebbe come una sorta di debug non influenza il risultato.

Oppure, utilizzato in un ciclo infinito:

while(print('still in the loop')) { 
    // do something very exciting 
} 

Anche se queste sono alcune cose che non si poteva fare con echo (causerebbe un errore di analisi), l'utilità di esso è sostanzialmente confinata alla test e debug di fase piuttosto che fase operativa.

+2

Grazie ... È davvero ovvio. Potresti anche stampare alcune variabili di loop. – BlitZ

0
**echo** 

No return value 
Outputs one or more strings separated by commas 

    e.g. echo "String 1", "String 2" 

**print** 

Returns 1, so it can be used in an expression 
Outputs only a single string 

ad es. if ((print "foo") & & (stampa "bar"))

1

Non riesco a vedere nessuna espressione utile. Ma posso creare un po 'strana:

ciclo For stampante breve:

for($i=0; $i<100; $i+=print($i.')<br/>')) ; 

Mentre contatore di stampa del ciclo:

//$result is some db result 
$rowCounter = 0; 
while($row = $result->fetchAssoc()) { 
    $rowCounter += print($row['column']); 
} 
+0

Cool, mi piacciono gli esempi. Soprattutto il ciclo for. Normalmente lo farei su due righe. Mi chiedo se è intelligente da usare o se sarebbe più saggio usare un altro codice per lo stesso risultato. –

Problemi correlati