Perché core utilizza print anziché echo?


24

Ho letto da qualche parte, e non ricordo dove, questo echoè un modo più efficiente di produrre dati allora print.

Perché Drupal core usa printcosì tanto? C'è qualche motivo speciale dietro questo?


1
Su un sidenote: print restituirà sempre 1 come valore, echo non restituirà nulla. Immagino che potrebbe essere utile in alcuni casi.
Bart,

Che tipo di caso potrebbe essere?
jayarjo,

Mi chiedevo anche quello! Buona domanda!
Aendrew

Risposte:


25

echoè solo più veloce negli ambienti accademici. La differenza è molto marginale. Un rapido benchmark che ho appena fatto: il tempo di recuperare una riga da una tabella con più di 2000 nodi è di 1 unità.

Per ottenere un miglioramento di 1 unità, avrei bisogno di sostituire circa 3.700.000 (oltre 3 milioni) printdichiarazioni con echo. In altre parole, se si desidera migliorare le prestazioni, questo non è certo il punto di partenza.

Visto che printpuò essere utilizzato in una gamma molto più ampia di casi echo, il primo presenta alcuni vantaggi. Ti lascia tre opzioni:

  • Usa sempre print
  • Utilizzare echoove possibile e eseguire il fallbackprint
  • Utilizzare echosempre e refactificare il codice se echonon può essere utilizzato, per usarlo

Drupal è andato in default sul primo.

Per rispondere alla tua vera domanda sul perché questo è stato scelto: non lo era. È semplicemente cresciuto in questo modo.


Potresti fornire un esempio di quando non è possibile utilizzare l'eco? È solo che non riesco a immaginare nessuno al momento.
jayarjo,

6
Il più ovvio è if (! print some_method() ) {print some_other_method()}. Poiché la stampa restituisce un valore VERO se in realtà ha stampato qualcosa. L'eco non restituisce nulla, motivo per cui è anche più veloce. Un altro esempio che vedrai è return print $somevaluealla fine di un metodo per restituire lo stato.
Berkes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.