212 votes

Y a-t-il une différence particulière entre intval et le casting vers int - `(int) X` ?

Y a-t-il une différence particulière entre intval et (int) ?

Exemple :

$product_id = intval($_GET['pid']);
$product_id = (int) $_GET['pid'];

Y a-t-il une différence particulière entre les deux lignes de code ci-dessus ?

184voto

Amber Points 159296

intval() peut être a passé une base à partir desquels on peut se convertir. (int) ne peut pas.

int intval( mixed $var  [, int $base = 10  ] )

49voto

t-dub Points 338

Une chose à noter à propos de la différence entre (int) y intval() : intval() traite les variables qui sont déjà int et float s comme ne nécessitant aucune conversion, quel que soit l'argument de base (depuis PHP 5.3.5 au moins). Ce comportement n'est pas le plus évident, comme le montre l'exemple de l'application commentaires sur la page de documentation PHP et répété sans vergogne ici :

$test_int    = 12;
$test_string = "12";
$test_float  = 12.8;

echo (int) $test_int;         // 12
echo (int) $test_string;      // 12
echo (int) $test_float;       // 12

echo intval($test_int, 8);    // 12 <-- WOAH!
echo intval($test_string, 8); // 10
echo intval($test_float, 8)   // 12 <-- HUH?

25voto

Pascal MARTIN Points 195780

Je pense qu'il y a au moins une différence : avec intval vous pouvez spécifier quelle base doit être utilisée comme second paramètre (base 10 par défaut) :

var_dump((int)"0123", intval("0123"), intval("0123", 8));

vous obtiendra :

int 123
int 123
int 83

15voto

user900469 Points 61

Amber est juste et si je peux ajouter une information utile Le type casting (ajouter un "(int)" devant votre expression) est 300 à 600% plus rapide que intval. Donc si votre but n'est pas de traiter d'autres bases que décimales, je recommande d'utiliser : (int) $something

8voto

deceze Points 200115

La chose qui intval fait qu'un simple moulage ne fait pas est la conversion de base :

int intval ( mixed $var [, int $base = 10 ] )

Mais si la base est de 10, intval devrait être le même qu'un cast (à moins que vous ne soyez pointilleux et que vous mentionniez que l'un fait un appel de fonction et pas l'autre). Comme indiqué sur la page page de manuel :

Les règles communes de la distribution des nombres entiers s'appliquent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X