PHP强制类型转换

3

我有一个同事经常会定义变量并强制指定它们的类型。例如,他会这样声明:

$this->id = (int)$this->getId();

或者当返回时,他总是以这样的方式返回值:

return (int)$id;

我知道PHP是一种弱类型语言,所以我不会问转换正在做什么。我真的想知道这样做的好处(如果有的话),或者他是否只是在浪费时间和精力?

2个回答

4

这有几个好处。

  1. 类型检查。没有类型检查,0 == false,1 == true。
  2. 净化。如果你将值插入到SQL查询中,你不能有SQL注入,因为字符串值会被转换为零。
  3. 完整性。它防止插入无效的数据库数据。同样,它转换为零,所以你不会尝试将字符串插入到数据库中的整数字段中。

2
+1,清理数据可能是这样做最有用的原因。 - casablanca

1
要将一个值显式转换为整数,可以使用(int)或(integer)强制转换。然而,在大多数情况下,由于运算符、函数或控制结构需要整数参数,因此不需要进行转换。也可以使用intval()函数将值转换为整数。

http://www.php.net/manual/en/language.types.integer.php#language.types.integer.casting

PHP不需要(也不支持)在变量声明中显式定义类型;变量的类型由使用变量的上下文确定。也就是说,如果将字符串值分配给变量$var,则$var变成字符串。如果然后将整数值分配给$var,则它变成整数。
PHP自动类型转换的一个例子是加法运算符“+”。如果任一操作数是浮点数,则两个操作数都将作为浮点数进行评估,并且结果将是浮点数。否则,操作数将被解释为整数,并且结果也将是整数。请注意,这不会更改操作数本身的类型;唯一的变化是如何评估操作数以及表达式本身的类型。

http://www.php.net/manual/en/language.types.type-juggling.php

你可以尝试这样做。

function hello($foo, $bar) {
    assert(is_int($foo));
    assert(is_int($bar));
}

http://php.net/manual/en/function.assert.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接