Newsgroup: it.comp.www.php
Titolo: operatore di concatenazione

Volevo porre subito un'altra domanda.
Che differenza c'è tra una espressione come questa:
$caramelle  = 3;
echo "Ho " , $caramelle , "caramelle";
ed una come questa?
$caramelle = 3;
echo "Ho " . $caramelle . "caramelle";
Il risultato è il medesimo, quindi anche la virgola è un operatore di 
concatenazione esattamente come il . (punto)?
ciao Maverik 

Maverik ha scritto:

assolutamente no
   echo e' un costrutto del linguaggio e non necessita delle parentesi
per racchiudere gli argomenti
   prova a fare questo
$caramelle  = 3;
echo strtoupper("Ho " , $caramelle , "caramelle");
echo strtoupper("Ho " . $caramelle . "caramelle");
   invece di andare a tentativi:
http://it.php.net/tutorial
http://it.php.net/manual/it/language.types.php#language.types.intro

"Maverik" <--> wrote:

No, la virgola e' solo parte del costrutto dell'istruzione echo.
La sintassi della istruzione echo e'
echo EXPR {, EXPR};
quindi ci possono essere una o piu' espressioni da stampare separate da
una virgola, dove ogni espressione deve essere un tipo semplice oppure un
oggetto per il quale e' definito il metodo pubblico __toString() (PHP5).
Nel tuo esempio, il primo caso usa tre espressioni, mentre il secondo
ha una sola espressione di tipo stringa, dove la stringa e' ottenuta
concatenando tre stringhe. Ovviamente la seconda versione e' meno
efficiente della prima perche' richiede l'allocazione della memoria e il
concatenamento delle stringhe, mentre nel primo caso le tre espressioni
vanno dritte in output nell'ordine in cui sono scritte.
A volte si trovano scritti gli argomenti tra parentesi:
echo(...);
ma queste parentesi non sono quelle di una funzione, ma le normali parentesi
che alterano l'ordine di valutazione delle espressioni. Ad esempio, in
echo ($a.($b.$c));
il concatenamento $b.$c avviene prima del concatenamento con
$a. Naturalmente questo e' perfettamente inutile, ma ha generato un po'
di confusione nell'interpretazione della sintassi dell'echo.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

 ha scritto nel messaggio 
news:e9j4k1$l1j$1...@area.cu.mi.it...

Vero, ho detto una fesseria. 

 di confusione nell'interpretazione della sintassi dell'echo.
Sì, la regola delle precedenze penso di averla abbastanza chiara. 

 Voglio dire, è tuta l'espressione ($a.($b.$c)) oppure che altro?
L'EXPR e' tutta ($a.($b.$c)).
Purtroppo non esiste una documentazione che descriva formalmente la
sintassi del PHP. Il manuale ufficiale 
www.php.net
 si limita a scarne
descrizioni seguite da un paio di esempietti, insufficienti per capire
bene. Ad esempio, l'istruzione echo viene quasi sempre presentata come
funzione, salvo che poi viene detto che non lo e', e questo genera
confusione. Per capire bene come stanno le cose bisognerebbe andare a
leggere il sorgente. Qui c'e' il mio tentativo di descrivere formalmente
il PHP con l'EBNF:
http://www.icosaedro.it/phplint/manual.html?p=syntax


 
http://www.icosaedro.it/phplint/manual.html?p=syntax
Ecco, infatti è già il secondo libro che prendo sul php ma devo dire che la 
sintassi del linguaggio non è mai troppo chiara. Adesso ho già ordinato un 
terzo libro, l'ultima edizione di apogeo sul php, e dovrebbe essere una 
guida abbastanza esauriente, però non so, se mi dici che neanche il sito 
ufficiale affronta certi aspetti... Comunque è un peccato, mi piacerebbe 
raggiungere una certa sicurezza con questo linguaggio, ma mi sento molto 
instabile, anche perché appunto le fonti sulle quali studio non sono così 
chiare.
ciao Mav. 

 chiare.
Il libro "Programming PHP" di Rasmus e' la dichiarazione di intenti del
linguaggio e la guida ufficiale. E' piuttosto chiaro ed esaurinete sulla
natura del linguaggio, ma anche li' la sintassi viene descritta a parole
cui seguono due esempietti, ma manca una definizione rigorosa.
