Conversione automatica dei tipi: cast

Buongiorno Gianni,

Vorrei qualche delucidazione sull conversione dei tipi.

Dunque, ho letto sulla tua dispensa del corso base, che il PHP effettua una conversione di numeri, stringhe e array, nel valore booleano true.

Ammettianmo per ipotesi che uno script deve valutare un numero, in questo caso il voto, se è positivo o negativo, ma non accetta valori vuoti o zero 0.

Praticamente scrivere :

if ($voto == "") || ($voto=="0") {
    echo 'inserisci un voto da 1 a 10'; }

oppure:

if ($voto) {
$giudizio = $voto < 6 ? 'negativo' : 'positivo';
echo "Il voto è $giudizio";
}

praticamente è la stessa cosa. Allora io mi chiedo a cosa serve tutto cio, considerato che, come hai detto tu, chi ha già qualche altra esperienza di porgrammazione, anche minima, il tutto può sembrare inspiegabile?

inviato 11 anni fa
TrxWeb
modificato 11 anni fa
X 0 X

Bella domanda!

Vuoi sapere perché il PHP si comporta così?

1) il PHP nasce come linguaggio "semplice", con l'unico scopo di funzionare senza che il programmatore debba sbattersi troppo. Pertanto al programmatore viene concessa parecchia libertà, forse troppa. Il PHP è anche la risposta ad un modo di programmare estremamente rigido proposto da C++ e Java

2) internamente il PHP distingue i tipi di dato (interi, decimali, stringhe), esternamente no. Una stessa variabile può contenere prima un tipo di dato, puoi un'altro, puoi un array e poi un oggetto. Per far collimare queste due nature del PHP (tipizzato internamente - senza tipi esternamente) è necessario una politica di cast automatico estremamente potente: da qualsiasi tipo di dato si deve poter passare ad un altro tipo di dato

3) il PHP, a differenza di linguaggi che producono file eseguibili, esegue gli script grazie al motore PHP. Questo motore non è altro che un programma che legge gli script e li esegue. Pertanto mentre un comune programma viene eseguito direttamente dall'hardware (e dal sistema operativo) di un PC, uno script PHP viene eseguito dal motore PHP. Questo comporta che il motore PHP ha la possibilità di capire cosa sta succedendo durante l'esecuzione dello script e può agire di conseguenza. Ad esempio se deve eseguire un IF che necessita un valore booleano, può fare prima un cast del valore passato e poi eseguire l'IF. Se deve effettuare una echo, prima converte tutto in stringa e poi manda in output il risultato

Queste sono solo alcune delle motivazioni che stanno dietro al comportamento del PHP circa il cast automatico.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
modificato 11 anni fa
X 0 X

Grazie Gianni, sempre celere  e chiaro nelle risposte.

Ora però, mi interesserebbe sapere, se è indifferente utilizzare un modo anzichè un'altro. Oppure è da preferire il secondo caso, ovvero , tornando all'esempio precedente if ($voto)  visto che  il motore php effettua la conversione? -mi sembra di capire che è di default- 

In caso positivo, l'utilità qual'è forse la velocità dello script stesso?

risposto 11 anni fa
TrxWeb
X 0 X

Tutte le conversioni avvengono di default. Il meccanismo è questo: che tipo di dato si aspetta il PHP? che tipo di dato invece è stato fornito? se i due tipi non coincidono il PHP effetua il cast dal secondo al primo.

Non c'è un modo corretto di programmare, puoi consapevolmente sfruttare il cast automatico oppure puoi lavorare come si fa con gli altri linguaggi. Il PHP vuole essere facile, per tutti...

Non ci sono rilevanti conseguenze sulla velocità di esecuzione degli script. Piuttosto starei attento alla "leggibilità" degli script (che comunque puoi migliorare con l'uso dei commenti)

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

L'argomente richiede un approfondimento.  :D

Grazie.  O0

risposto 11 anni fa
TrxWeb
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda