Newsgroup: it.comp.www.php
Titolo: Una spiegazione razionale sul perchè convertire un array in intero ritorna 1

...se l'array non è vuoto?
 
$a = (int)array(); // 0
$b = (int)array('foo'); // 1
$c = (int)'foo'; // 0, ovviamente
 
Sono io che non capisco un passaggio?

 $c = (int)'foo'; // 0, ovviamente
 
E dove sarebbe la razionalita' nel convertire un array in intero?? :-)
 
Ciao.
 
-- 
Pubblicita' regresso: 
http://www.ferrero.org
 
** Per scrivermi in mail, sostituire nutella con ferrero...
** To contact me by email, change nutella to ferrero...
 
 
 


Fermo restando che alcuni tipi di conversioni sono sempre un po' misteriose, qui siamo nella situazione "patate-carote" (quante carote sono 5 patate?). Te che cosa ti saresti aspettato e perché? Per me l'unica cosa senza sarebbe stata  restituire un errore :-|
Ciao!

 Fermo restando che alcuni tipi di conversioni sono sempre un po' misteriose, qui siamo nella situazione "patate-carote" (quante carote sono 5 patate?). Te che cosa ti saresti aspettato e perché? Per me l'unica cosa senza sarebbe stata  restituire un errore :-|
 
Misteriose mi pare un bonario eufemismo... direi scelte discutibili, 
anche io vedrei più di buon occhio un bell'errore e mi sbilancerei pure 
in favore di un errore fatale.
 
D'altra parte non è l'unica trovata balorda:
empty(0) // false
empty('0') // false
La giustificazione è che la funzione ritorna "whether a variable is 
considered to be empty"... quindi esprime un punto di vista del team di 
sviluppo ;-)
 
O ancora:
$stringa = 'pippo';
if($stringa) // valutato true
 
-- 
Design for the future, because it will be here sooner than you think.
(C) Eric S. Raymond, from "The Art of Unix Programming"

 
 
Ce ne sono a bizzeffe di scelte discutibili, e di sicuro le conversioni sono una di quelle cose che fanno storcere il naso alla maggior parte dei programmatori che iniziano ad avvicinarsi al linguaggio le prime volte, ma d'altro canto non è possibile avere un linguaggio che permette la conversione di tutto a tutto senza prendere svariate decisioni ad capocchiam da parte degli implementatori. 
In realtà di problemi derivanti da conversioni inaspettate ne ho avuti poco e niente, e scommetto questo valga anche per la maggior parte dei presenti: questo dimostra che, pur essendo brutto, statisticamente un gran problema non è :-)
Ciao!

 Fermo restando che alcuni tipi di conversioni sono sempre un po' misteriose, qui siamo nella situazione "patate-carote"
 
Bhè, ammetto che in effetti sono anche io al limite del decente..
Praticamente ho una funzione che riceve in ingresso un valore che può essere o un intero, o un array di interi; Ma a seconda delle cose devo fare due cose abbastanza distinte.
 
Quindi avevo fatto il controllo
if((int)$foo === 0)
{
    // era un array
}
else
{
    // ragiono come intero
}
 
invece devo fare il controllo 
if(is_array($foo) === 0)
{
    // era un array
}
else
{
    // ragiono come intero
}
 
 
Anche se, visto che php considera in un qualche modo le stringhe come array, non mi stupirebbe se un domani mi ritorna true anche se gli passo una stringa -.- (e in quel caso mi taglio le vene)

 Anche se, visto che php considera in un qualche modo le stringhe come array, non mi stupirebbe se un domani mi ritorna true anche se gli passo una stringa -.- (e in quel caso mi taglio le vene)
 
Come sopra. Non so cosa faccia la tua funzione ma non riesco neppure ad immaginare una funzione che possa lavorare su interi, array o stringhe indistintamente... :-/
Ciao!

 Ciao!
 
Bhè per falra breve, la funzione crea delle relazioni tra due - o più - entità.
 
In ingresso prende l'id della entità _padre_, e quello fisso intero, però per i figli ho fatto si che se è un figlio unico passo l'id intero, se sono multipli l'array di id.
Potrei mettere che prende solo array e nel caso sia un figlio unico passo un array con un valore, in effetti mi risolvo un problema


Dal manuale:
 
http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting
 
 
"The behaviour of converting to integer is undefined for other types. Do
not rely on any observed behaviour, as it can change without notice."
dove "other types" sono quelli diversi da boolean, float e string.
 
Quindi su un'altra macchina o anche sulla stessa dopo qualche
cambiamento, con un diverso S.O. o versione di PHP o chissà cos'altro,
potrebbe tornare un diverso valore.


Direi che se hai come struttura dati un albero o un grafo allora sì, ha *più* che senso avere un array di figli (e/o padri).
Ciao!

 dove "other types" sono quelli diversi da boolean, float e string.
 
 
Bhè almeno siamo avvertiti (non avevo letto quella parte).. ammetto che anche il mio utilizzo della cosa era al limite del decente