Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

sommare un numero a una stringa

226 views
Skip to first unread message

vittorio

unread,
Mar 9, 2012, 3:00:57 PM3/9/12
to
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


Strae

unread,
Mar 9, 2012, 3:27:39 PM3/9/12
to
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 ;)

vittorio

unread,
Mar 9, 2012, 3:46:34 PM3/9/12
to
<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



Alessandra R.

unread,
Mar 11, 2012, 12:11:01 AM3/11/12
to
Strae, rischiando una denuncia penale, ha osato scrivere:

> Questo è uno dei motivi per cui php è tanto odiato da chi programma
> 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

giovanni.v

unread,
Mar 11, 2012, 11:47:26 AM3/11/12
to
Il 11/03/2012 6.11, Alessandra R. ha scritto:
> "." 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à

Beh, credo che certe regole sintattiche si prendano per buone e basta.
Certo per chi viene da delphi è dura ma non più di altri linguaggi.

> "=" che può essere usato (per errore) all'interno delle
> 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"

Strae

unread,
Mar 11, 2012, 4:35:06 PM3/11/12
to
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)

Alessandro Pellizzari

unread,
Mar 12, 2012, 5:40:16 AM3/12/12
to
Il Sun, 11 Mar 2012 05:11:01 +0000, Alessandra R. ha scritto:

Sono completamente in disaccordo con te.

> infatti la gestione dei dati del php (che poi arriva dritta dal C,
> correggetemi se sbaglio)

Solo alcune strutture sintattiche derivano dal C. La gestione dei dati
no. C e` staticamente tipizzato, PHP e` dinamico. In C ci sono puntatori,
in PHP no. Sono completamente diversi.

> è una cosa abominevole, come pure altre cose
> fastidiose (il dover usare il "." per unire due stringhe al posto del
> più intuitivo "+",

Il + non e` piu` intuitivo, anzi. E` semplicemente diventato una
convenzione dopo che il C++ ha permesso di sovraccaricarlo per unire
stringhe.

E il topic a cui stiamo rispondendo lo dimostra. Se fosse stato come dici
tu, il risultato sarebbe stato "0TRUE".

> i simboli di dollaro come prefisso alle variabili,
> presenti quindi ovunque e in grado di minare la leggibilità di un
> listato,

IL $ aumenta la leggibilita` di un listato. Vedi subito se stai accedendo
a una variabile, a una costante, a una funzione, ecc.

> l' "=" che può essere usato (per errore) all'interno delle
> condizioni e funziona comunque, come assegnazione (gasp!) ).

Questione di abitudine. Io, per esempio, odio il := di Pascal e soci.

> 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.

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.

Wodka40°

unread,
Mar 12, 2012, 5:49:12 AM3/12/12
to
Il caro Alessandra R. in un impeto grammaticale scriveva:
zac
> infatti la gestione dei dati del php (che poi arriva dritta dal C,
> 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


Wodka40°

unread,
Mar 12, 2012, 5:59:25 AM3/12/12
to
Wodka40° ha spiegato il 12/03/2012 :
zac
> 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)


Alessandra R.

unread,
Mar 12, 2012, 6:53:01 AM3/12/12
to
giovanni.v, rischiando una denuncia penale, ha osato scrivere:

> Beh, credo che certe regole sintattiche si prendano per buone e
> basta. Certo per chi viene da delphi è dura ma non più di altri
> linguaggi.

bingo! io arrivo proprio da Delphi :))

> Quante volte sono impazzito non riuscendo a capire perche quelle
> banalissime tre righe di codice non fornivano il risultato atteso!

mi domando se ci sia almeno 1 (UN) caso nel quale l' "=" abbia un senso
dentro una condizione.. mah!
A proposito di =, una cosa che non ho mai visto in nessun linguaggio di
programmazione, a parte forse un vecchissimo basic che nemmeno ricordo
come si chiamasse, è l'assegnazione multipla, del tipo:
a=b=c=10, per assegnare 10 a tutte e tre le variabili.

> 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.

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

Alessandra R.

unread,
Mar 12, 2012, 6:57:44 AM3/12/12
to
Wodka40°, rischiando una denuncia penale, ha osato scrivere:

> 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!

è vero.. premetto che il C lo ho solo "letto", mai usato realmente, ma
ricordavo che si potessero sommare stringhe, interi e float, tutto in
un'unica espressione, e tutto veniva convertito "al volo" ottenendo un
risultato diverso (come tipo) in base a quella che era la variabile
destinazione (stringa se stringa, float se float, ecc.). Un pasticcio
totale, insomma.

> 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

vero vero.

> Puoi fare bellissime gestioni in php e abomini immani in
> Java...sviluppare cazzate in C e finezze in VB.net...e viceversa!

si, ma il livello di controllo in linguaggi ad oggetti, e strutturati,
è ben altro. C'è anche una maggior prolissità da mettere in conto, ma
c'è anche una gran pulizia logica, a fare le cose bene.

> 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

Alessandro Pellizzari

unread,
Mar 12, 2012, 9:38:50 AM3/12/12
to
Il Mon, 12 Mar 2012 10:57:44 +0000, Alessandra R. ha scritto:

> è vero.. premetto che il C lo ho solo "letto", mai usato realmente, ma
> ricordavo che si potessero sommare stringhe, interi e float, tutto in
> un'unica espressione, e tutto veniva convertito "al volo" ottenendo un
> risultato diverso (come tipo) in base a quella che era la variabile
> destinazione (stringa se stringa, float se float, ecc.). Un pasticcio
> totale, insomma.

No, credo tu ti confonda con qualcos'altro, perche` in C, se fai una cosa
del genere, ti blocca il compilatore prima ancora che tu dica "bah!"

>> Puoi fare bellissime gestioni in php e abomini immani in
>> Java...sviluppare cazzate in C e finezze in VB.net...e viceversa!
>
> si, ma il livello di controllo in linguaggi ad oggetti, e strutturati, è
> ben altro. C'è anche una maggior prolissità da mettere in conto, ma c'è
> anche una gran pulizia logica, a fare le cose bene.

PHP e` un linguaggio ad oggetti e strutturato.

Forse intendi che il livello di controllo in linguaggi compilati e
staticamente tipizzati e` un altro. Si`, e` il compilatore. Avendo tipi
statici il compilatore si accorge di certi errori prima che il software
venga usato.
E` anche vero che con l'aritmetica dei puntatori puoi fare schifezze
inenarrabili in C/C++, e usando male i generics, anche in Java puoi fare
cose molto brutte. Pascal/Oberon/Delphi non li uso da troppo tempo, e non
ho avuto modo di fare tante schifezze con loro, ma ricordo qualche
Segmentation Fault anche con loro.

>> Conta lo spazzino...non la scopa!
>
> 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.

Alessandro Pellizzari

unread,
Mar 12, 2012, 9:49:00 AM3/12/12
to
Il Mon, 12 Mar 2012 10:53:01 +0000, Alessandra R. ha scritto:

> mi domando se ci sia almeno 1 (UN) caso nel quale l' "=" abbia un senso
> dentro una condizione.. mah!

while ( $row = mysql_fetch_assoc($conn)) {
...
}

Quando non ci sono righe torna false e il while si interrompe. Ti eviti
doppie assegnazioni tipo

$row = mysql_fetch_assoc($conn);
while ($row) {
...
$row = mysql_fetch_assoc($conn);
}


> A proposito di =, una cosa che non ho mai visto in nessun linguaggio di
> programmazione, a parte forse un vecchissimo basic che nemmeno ricordo
> come si chiamasse, è l'assegnazione multipla, del tipo: a=b=c=10, per
> assegnare 10 a tutte e tre le variabili.

Python.
Oltre a PHP, naturalmente.

> 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.

E` poco leggibile perche` non lo conosci.
Per me i sorgenti in Ruby sono arabo. Objective-C e` quasi marziano
(anche se sto trovando il bandolo della matassa). Perl ho rinunciato a
capirlo.

> Bisogna stare molto attenti a quel che si fa. Molto
> attenti.

Come in tutti i linguaggi.
Anzi, in PHP e` piu` semplice perche` puoi stampare gli errori a video o
salvarli in un log. Puoi lanciare eccezioni come anche registrare un
handler che intercetta sia errori che eccezioni. Puoi scegliere il
livello di logging.

Certo, e` un linguaggio dinamico, quindi vedi gli errori a runtime (visto
che non c'e` un "compile-time", strettamente parlando)

> Delphi, inutile dirlo, ma anche C# (cugino di Delphi, oltretutto) sono
> 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.

Leonardo Serni

unread,
Mar 12, 2012, 10:31:57 AM3/12/12
to
On 12 Mar 2012 10:53:01 GMT, "Alessandra R." <ale...@alerom.com> wrote:

>A proposito di =, una cosa che non ho mai visto in nessun linguaggio di
>programmazione, a parte forse un vecchissimo basic che nemmeno ricordo
>come si chiamasse, è l'assegnazione multipla, del tipo:
>a=b=c=10, per assegnare 10 a tutte e tre le variabili.

C.

>'benvenuto '.$nome.' come va?'

>ad un

>"benvenuto $nome come va?"

i18n(BENVENUTO_COME_VA, $nome); ;-)

>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.

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?

Wodka40°

unread,
Mar 12, 2012, 11:10:11 AM3/12/12
to
Sembra che Alessandra R. abbia detto :
zac
> si, ma il livello di controllo in linguaggi ad oggetti, e strutturati,
> è ben altro. C'è anche una maggior prolissità da mettere in conto, ma
> 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)


Alessandra R.

unread,
Mar 12, 2012, 11:33:38 AM3/12/12
to
Wodka40°, rischiando una denuncia penale, ha osato scrivere:

> 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!)!

documentazione e sperimentazione devono andare di pari passo. Almeno
per me è così: leggere 1800 pagine di libro di fila non mi lascia nulla
nella memoria.

> Quindi sarebbe interessante sapere perchè il tuo libro ti fa
> confondere proponendoti ( 0 + "TRUE" ) == FALSE ...che voleva farti
> 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

Wodka40°

unread,
Mar 12, 2012, 12:00:25 PM3/12/12
to
Alessandra R. ha usato la sua tastiera per scrivere :
> Wodka40°, rischiando una denuncia penale, ha osato scrivere:
UE" ) == FALSE ...che voleva farti
>> 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.
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)


dino

unread,
Mar 14, 2012, 8:44:32 AM3/14/12
to
> A proposito di =, una cosa che non ho mai visto in nessun linguaggio di
> programmazione, a parte forse un vecchissimo basic che nemmeno ricordo
> come si chiamasse, è l'assegnazione multipla, del tipo:
> 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++


Andrea D'Amore

unread,
Mar 14, 2012, 10:15:18 AM3/14/12
to
In article <jjq3rf$35u$1...@nnrp-beta.newsland.it>,
"dino" <a...@aworrrnder.pp> wrote:

> ma non dire stronzate

Quanta impetuosità.

> lo puoi fare anche con
> VB,JavaScript,Cobol,PHP,PERL,C#,VBNET,VisualC++

A memoria anche il C rientra nella lista, l'assegnazione ritorna lo
rvalue.

vittorio

unread,
Mar 14, 2012, 3:43:28 PM3/14/12
to
> mi si son mischiati i post....volevo sapere perchè il libro gli proponeva
> 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 )


vittorio

unread,
Mar 14, 2012, 3:49:01 PM3/14/12
to
l' "=" che può essere usato (per errore) all'interno delle
> 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 )


0 new messages