Newsgroup: it.comp.www.php
Titolo: sommare un numero a una stringa

nel libro che sto leggendo dicono che l'espressione
 
( 0 + "TRUE" )
 
ha valore FALSE.
 
Come mai?
 
E' la somma di un numero con una stringa.
Stringhe vuote o contenenti il carattere 0  sono false, anche il numero 0 è 
false,ma non capisco la somma indicata quanto faccia.
 
Ciao 
 
 

Questo è uno dei motivi per cui php è tanto odiato da chi programma in altri linguaggi che hanno giusto un pelo di tipizzazione dei dati.
 
Qualsiasi stringa convertita in bool (o intero) diventa 0, che equivale a false, quindi è normale che il risultato sia false (0)
 
Anche se però mi sembra che se la stringa, invece che "TRUE" fosse "123", venga convertita in intero per fare la somma.. ma sono quegli abomini che nella vita reale non si fanno mai ;)

<Qualsiasi stringa convertita in bool (o intero) diventa 0, che equivale a 
false,
 
ho capito: converte la stringa in numero, che diventa 0 , e  ( 0+0) fa zero
 
ciao
 
 
 

 in altri linguaggi che hanno giusto un pelo di tipizzazione dei dati.
 
infatti la gestione dei dati del php (che poi arriva dritta dal C,
correggetemi se sbaglio) è una cosa abominevole, come pure altre cose
fastidiose (il dover usare il "." per unire due stringhe al posto del
più intuitivo "+", i simboli di dollaro come prefisso alle variabili,
presenti quindi ovunque e in grado di minare la leggibilità di un
listato, l' "=" che può essere usato (per errore) all'interno delle
condizioni e funziona comunque, come assegnazione (gasp!) ).
 
Ciò nonostante, col php si possono fare delle cose molto carine, ma
certo il debug è un vero e prorio incubo, proprio come col vecchio C.
 
-- 
Alessandra
 
Per te io sono ateo, ma per dio io sono una leale opposizione - Woody
Allen

 condizioni e funziona comunque, come assegnazione (gasp!)
 
Quante volte sono impazzito non riuscendo a capire perche quelle 
banalissime tre righe di codice non fornivano il risultato atteso!
 
D'altra parte credo che chi viene da linguaggi più rigorosi in poco 
tempo trova il suo modo di scrivere evitando trappole.
Ad esempio, riprendendo un topic appena sopra, non mi sognerei mai di 
usare "print $n++", certe scorciatoie tanto nerd sembrano vera scuola di 
autolesionismo.
 
-- 
Design for the future, because it will be here sooner than you think.
(C) Eric S. Raymond, from "The Art of Unix Programming"

io non mi riferivo alla sintassi, ma alla tipizzazione dei dati ;)
 
A me onestamente non dispiace il punto per il concatenamento e il + per la somma, sono due cose diverse e usare lo stesso simbolo mi pare errato
Per l'assegnazione dentro le condizioni invece, sfondi una porta aperta
Il simbolo del dollaro per le variabili non l'ho mai visto come un problema, anzi.. forse è inutile, ma non credo faccia danni (e diventa una manna da cielo quando ti capita di dover parsare del codice per scrivere il markup della documentazione in modo automatico)

 certo il debug è un vero e prorio incubo, proprio come col vecchio C.
 
Il debug e` un incubo in tutti i linguaggi, tanto che fin da sempre ci 
sono dei debugger per tutti i linguaggi. Le problematiche sono diverse, 
ma i mal di testa ce li avrai sempre.
 
Bye.
 

 correggetemi se sbaglio)
zac
Beh insomma calma ....ti correggo eccome!
I tipi di dati ci sono eccome nel C!
un link fra milioni...il primo che avevo sottomano...
http://www.ateneonline.it/hyperbook/c_book/C1102.htm
 
 
Però la potenza del C è nella possibilità di "disattivare" tutto e 
ragionare in termini di byte e locazioni di memoria!
Ovviamente se considero tutto "byte" e lavoro di puntatori posso 
sommare fichi e bulloni in C. Questa potenza è al 90% usata per fare 
bellissimi buffer overflow e spianare la strada a hacker più o meno 
validi...nel restante 10% per programmare fichissime e velocissime 
routine!
 
il php è una cosa ibrida...imho abbastanza incapibile all'inizio per me 
che vengo da dotNet: un linguaggio potente espandibile che si porta 
dietro un retaggio del passato un po anacronistico.
Ovviamente il linguaggio conta il 10% per un programmatore...conta il 
suo cervello: fatto il reset ed imparato le nuove "convenzioni" di php 
tutto si appiana!
 
 
Puoi fare bellissime gestioni in php e abomini immani in 
Java...sviluppare cazzate in C e finezze in VB.net...e viceversa!
 
Conta lo spazzino...non la scopa!
 
 
p.s.
Non lasciare anche se si chiama PHP sempre le variabili "a loro 
stesse"..in balia dell'uTonto....ti complichi la vita!
 
http://www.webmasterpoint.org/funzione/4/funzione_PHP/264/intval.html
 
 
-- 
----- Italliaaaaa 3227! -----
Italian way to work flexibility
http://www.facebook.com/photo.php?fbid=3008023093650&set=a.3007867849769.136344.1654637325&type=1&theater
 
 
 

 
http://www.webmasterpoint.org/funzione/4/funzione_PHP/264/intval.html
 
intval
o is_numeric o is_nan
le vie sono più di una (in questo è simile al dotNet)
 
NUMERIC
http://it2.php.net/manual/en/function.is-numeric.php
 
 
NAN
http://php.net/manual/en/function.is-nan.php
 
 
 
leggi anche i commenti che talvola (quasi sempre) sono illuminanti per 
un principiante!
 
-- 
----- Italliaaaaa 3227! -----
Ho trovato una città di mattoni, ve la restituisco di marmo.
(Imperatore Augusto da Epistole)
 
 

 autolesionismo.
 
sono d'accordissimo con te. Come pure io preferisco di gran lunga un:
 
'benvenuto '.$nome.' come va?'
 
ad un 
 
"benvenuto $nome come va?"
 
comunque l'impressione generale, dopo un paio di mesi di php, è che il
php "duro e puro", non ad oggetti, sia un pò come il vecchio basic
interpretato: poca leggibilità, possibilità di errori a gogò, e
costrutti "nerd" che da un lato semplificano la vita, dall'altra la
complicano non poco. Bisogna stare molto attenti a quel che si fa.
Molto attenti.
Delphi, inutile dirlo, ma anche C# (cugino di Delphi, oltretutto) sono
su un altro pianeta.
 
-- 
Alessandra
 
Chi insegna che non la ragione, ma l'amore sentimentale deve governare,
apre la strada a coloro che governano con l'odio - Karl Popper

 Conta lo spazzino...non la scopa!
 
conta pure la scopa :D
 
-- 
Alessandra
 
Noè era il prediletto del Signore: viveva nel deserto, divorato dalla
sete e dai pidocchi. - Giobbe Covatta

 conta pure la scopa :D
 
Diciamo che se devi lucidare un pavimento e` meglio non usare la scopa, e 
se devi togliere le foglie dal vialetto ci sono scope piu` adatte di 
altre.
 
Definire un linguaggio "schifoso" perche` non ti piace o non ne conosci 
la sintassi e` un po' pericoloso. Puoi dire che non ti piace (ce ne sono 
tanti che non mi piacciono...), ma non che e` fatto male. Soprattutto 
quando "muove" oltre il 70% dei siti web. O sono tutti imbecilli quelli 
che li fanno (e stiamo parlando di programmatori che solitamente hanno 
una certa cultura nel campo, non di utonti che usano quello che si 
trovano installato), o qualcosa di buono deve averlo.
 
Bye.
 

 su un altro pianeta.
 
Si`, nel pianeta dei linguaggi compilati e staticamente tipizzati.
 
Se vuoi diventare davvero brava in PHP devi scrollarti di dosso le 
tecniche che usi in Delphi, e imparare cosa significa lavorare con un 
linguaggio dinamico.
 
Bye.
 

Molto attenti.
 
Cosi' dev'essere.
 
Fuggi quel linguaggio che ti consentisse di programmare dormendo.
 
Leonardo
 
-- 
Tell us whether you spy, in the light of the morn,
what saluted was fiercely at the fall of the past day:
whose pips and whose bands in the very heart of the fray
bravely floated from the bulwarks to which we were sworn?

 c'è anche una gran pulizia logica, a fare le cose bene.
zac
è un po OT...
 
in C# hai l'integer
in VB.net hai l'integer
in VB.net l'integer è implicitamente checked....ossia genera un buffer 
overflow se il numero è troppo grosso!
in C# dipende da come hai settato il compilatore...se la lasci di 
default: NO!...se il numero è troppo grosso...non si arrabbia 
nulla...TRONCA il numero....!!!
 
Ti lascio immaginare i casini se non conosci questo comportamento...ed 
infatti la prima volta ci son stato 2 giorni a debuggare ...solo perchè 
non avevo letto bene la documentazione(la voglia di bruciare le 
tappe...il peggior nemico di un programmatore!)!
 
Quindi sarebbe interessante sapere perchè il tuo libro ti fa confondere 
proponendoti ( 0 + "TRUE" ) == FALSE
...che voleva farti capire?
 
-- 
----- Italliaaaaa 3227! -----
Ci sono cattivi esploratori che pensano che non ci siano terre dove 
approdare solo perché non riescono a vedere altro che mare attorno a 
sé.
(Francesco Bacone)
 
 

 capire?
 
non so a cosa tu ti riferisca, precisamente.
In delphi, comunque, non puoi sommare tra loro variabili di tipo
diverso, con poche eccezioni (ad esempio integer e float), e a meno di
un cast esplicito. Diciamo che la rigidità imposta è ben ripagata dalla
pulizia del codice (anche se certamente più prolisso), e si rischiano
molti meno errori.
 
-- 
Alessandra
 
In quella Eva si trovava vicino a un albero; a un tratto si girò e vide
un serpente. E disse: "Che schifo !" "Sei bella tu ! " rispose il
serpente, che era permaloso. - Giobbe Covatta

 molti meno errori.
sorry...volevo fare 2 post...
mi si son mischiati i post....volevo sapere perchè il libro gli 
proponeva quell'esempio...a che pro!
 
-- 
----- Italliaaaaa 3227! -----
Là dove l'uomo scopre un minimo di ordine, immediatamente ne suppone 
troppo.
(Francesco Bacone)
 
 

 a=b=c=10, per assegnare 10 a tutte e tre le variabili.
 
 
ma non dire stronzate ,lo puoi fare anche con 
VB,JavaScript,Cobol,PHP,PERL,C#,VBNET,VisualC++ 
 
 

 VB,JavaScript,Cobol,PHP,PERL,C#,VBNET,VisualC++ 
 
A memoria anche il C rientra nella lista, l'assegnazione ritorna lo 
rvalue.

 quell'esempio...a che pro!
 
l'avevo postato io.....era un esercizio in cui dovevi indovinare il valore 
di verità di alcune espressioni logiche.
 
(libro php5 di oreilly ) 
 
 

 condizioni e funziona comunque, come assegnazione (gasp!) ).
 
c'è un trucco: basta invertire l'ordine nel test ,cioè scrivi
 
12== $foo  ( se ti sbagliassi,   12= $foo  da infatti subito errore )
 
 
 
anzichè  $foo == 12   ( se ti sbagliassi,    $foo=12 non  darebbe  errore )