在intval和(int)之间有什么特殊的区别吗?
例子:
$product_id = intval($_GET['pid']);
$product_id = (int) $_GET['pid'];
以上两行代码之间有什么特别的区别吗?
在intval和(int)之间有什么特殊的区别吗?
例子:
$product_id = intval($_GET['pid']);
$product_id = (int) $_GET['pid'];
以上两行代码之间有什么特别的区别吗?
当前回答
intval做了一些简单强制转换做不到的事情:
int intval ( mixed $var [, int $base = 10 ] )
如果基数是10,则intval应该与强制类型转换相同(除非你会吹毛求疵地提到一个函数调用而另一个没有)。如手册页所述:
整数强制转换的通用规则适用。
其他回答
intval的一个有用属性是——因为它是一个函数而不是语言构造——它可以作为参数传递给需要函数的函数。你不能用(int)这样做。
例如,我使用它将整数传递给array_map,以清除要包含到SQL IN()子句中的整数。这里有一个例子:
$ids = implode(",", array_map('intval', $_POST['array_of_integers']));
$sql = "SELECT * FROM table WHERE ids IN ($ids)";
intval做了一些简单强制转换做不到的事情:
int intval ( mixed $var [, int $base = 10 ] )
如果基数是10,则intval应该与强制类型转换相同(除非你会吹毛求疵地提到一个函数调用而另一个没有)。如手册页所述:
整数强制转换的通用规则适用。
安珀说得对,如果我能补充一点有用的信息 类型强制转换(在表达式前添加“(int)”)比intval快300%到600%。 所以如果你的目的不是处理十进制以外的其他进位,我建议使用: 美元(int)
关于(int)和intval()之间的区别需要注意的一点是:intval()将已经是int型和浮点型的变量视为不需要转换,不管基本参数是什么(至少从PHP 5.3.5开始)。这种行为并不是最明显的,正如PHP文档页的评论中所指出的,并在这里无耻地重申:
$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?
我认为至少有一个区别:使用intval,你可以指定应该使用哪个进制作为第二个参数(默认为10进制):
var_dump((int)"0123", intval("0123"), intval("0123", 8));
会让你:
int 123
int 123
int 83