echo() - concatenazione e parametri multipli [?]

  • Creatore Discussione Creatore Discussione xshell
  • Data di inizio Data di inizio

xshell

Nuovo Utente
17 Lug 2008
20
0
0
Ciao. Scusate per la domanda che potrebbe essere banale. Non ho mai prestato attenzione a questa differenza, ma ho notato che in alcuni script, la funzione echo() contiene stringhe divise da punti, altre volte da virgole. In un primo momento ho pensato fosse solo una questione di gusti, ma documentandomi, ho letto che, dividendo le stringhe con un punto, si effettua una concatenazione, mentre con la virgola si passano paramentri multipli... cosa significa tutto ciò? E' importante?
 
Almeno una differenza tra i due approcci esiste di sicuro e riguarda le precedenze con cui viene risolta la chiamata alla funzione echo().
Per cercare di essere il più chiaro possibile ti consiglio di guardare questo script, prevedere quale sarà il risultato in output e poi provare a farlo girare...

PHP:
<?php

function funzione() {
  echo 'funzione ';
  return 'risultato';
}

print("<p>Echo con parametri</p>");

echo "Echo: ", funzione();

print("<p>Echo con concatenazione</p>");

echo "Echo: " . funzione();

?>
 
Grazie, adesso ho quasi capito: passando parametri multipli con la virgola, tutto è eseguito in sequenza, mentre con la concatenazione si dà precedenza alle funzioni... ma in quest'ultimo caso non ho afferrato quello che lo script fa...

PHP:
funzione()
{
    echo "Funzione ";
    return "risultato";
}

echo "Echo: ". funzione();

Stampa a video: risultato Echo: Funzione

Ma con quale ordine? Prima il valore di ritorno della funzione, poi la stringa e poi la funzione?

P.S: Scusa se ho risposto tardi, ma pensavo che non avrei ricevuto risposta...
 
Nella concatenazione, come hai giustamente detto, devono prima essere valutate le funzioni per poter concatenare il risultato agli altri elementi.
Quindi in questo caso la prima cosa che fa il PHP è richiamare la funzione funzione() che stampa a video "Funzione ", quindi può concatenare il risultato di funzione() a "Echo: ".

Per cui:
- Esegue funzione() che stampa Funzione
- Concatena gli elementi Echo:
e il risultato della funzione risultato

Da questo si ottiene che il risultato finale è: Funzione Echo: risultato
 
Veramente eseguendo lo script da:

risultato Echo: Funzione

prima scrive "risultato" e poi "Funzione"...
 
Per curiosità, che versione di PHP utilizzate? Io ho la 5.2.6 e l'output che mi da lo script completo è questo...

Echo con parametri
Echo: funzione risultato

Echo con concatenazione
funzione Echo: risultato
 
Direi che sta quasi diventando una disputa filosofica, dove ognuno ha una sua verità soggettiva e la verità assoluta non esiste...

Esaminiamo questa porzione di codice:

PHP:
funzione()
{
    echo "Funzione ";
    return "risultato";
}

echo "Echo: " . funzione();

Viene dichiarata una funzione funzione() (largo alla fantasia) che ha come compito di stampare a video la stringa "Funzione " e che ritorna come risultato "risultato".

Alla base di tutto c'è la concatenazione di stringhe. Per poter concatenare il risultato di funzione() a "Echo", per prima cosa il PHP deve eseguire funzione(), giusto? E che cosa fa funzione()?! Stampa a video "Funzione ", e ritorna "risultato" che verrà concatenato a "Echo" e quindi il risultato della concatenazione viene stampato a video.
Per cui, secondo questo ragionamento:
1) Stampa a video "Funzione "
2) Concatenazione "Echo: " . "risultato"
3) Stampa a video "Echo: risultato"

E quindi il risultato finale dovrebbe essere:

Funzione Echo: risultato

O sbaglio?

Il fatto di voler sapere le versioni di PHP è solo per capire se ci possono essere delle discrepanze a livello di precedenze negli operatori tra diverse versioni...
 
Ultima modifica:
Trogo ha scritto:
Direi che sta quasi diventando una disputa filosofica, dove ognuno ha una sua verità soggettiva e la verità assoluta non esiste...

Anch'io utilizzo la versione 5.26... ma quando eseguo lo script in localhost con Apache 2.29 mi stampa prima il valore di ritorno...
non sò il perché... infatti sono io che ho posto questa domanda :D.
 

Discussioni simili