微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 为什么我总是得到0?

我向file.PHP发送一个请求,其中包含这样的URL:file.PHP?number = 2

file.PHP

$number = 0;
if (isset($_GET['number'])) {
    $temp_var = $_GET['number']; // 2
    if (ctype_digit($temp_var)) {
        $number = (int)$temp_var; // 2
    }
}   
print $number; // 0

作为回应,我得到0(零).为什么?

解决方法:

问题出在ctype_digit()

看看这个例子

<?PHP

$numeric_string = '42';
$integer        = 42;

ctype_digit($numeric_string);  // true
ctype_digit($integer);         // false (ASCII 42 is the * character)

is_numeric($numeric_string);   // true
is_numeric($integer);          // true
?>

ctype_digit($整数); // false(ASCII 42是*字符)在您的情况下也会发生这种情况,因为2是不同非数字字符的ASCII值,if()在您的情况下返回false.

如果要检查字符串或数字实际上是否为int,则应使用is_numeric()

并且您的代码将变为:

$number = 0;
if (isset($_GET['number'])) {
    $temp_var = $_GET['number']; // 2
    if (is_numeric($temp_var)) {
        $number = (int)$temp_var; // 2
    }
}   
print $number; // 2

ctype_digit()手动说明:

函数需要一个字符串才有用,因此例如传入一个整数可能不会返回预期的结果.但是,请注意HTML表单将导致数字字符串而不是整数.另请参见手册的“类型”部分.

如果提供介于-128和255之间的整数,则将其解释为单个字符的ASCII值(为了允许扩展ASCII范围内的字符,添加了256个负值).任何其他整数都被解释为包含整数的十进制数字的字符串.

加:

如果有人真的绝对必须使用ctype_digit(),出于安全考虑,你可以使用:

ctype_digit((string)$value);

这样,你将始终确保$value是一个字符串,如果它只由数字字符组成,那么ctype_digit将评估为true;)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐