2010-09-05 195 views
3

我有一个同事不断地分配变量并强制他们的类型。例如,他将宣布类似这样:php强制类型

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

或返回时,他总是会返回值,例如:

return (int)$id; 

据我所知,PHP是一种松散类型的语言,所以我不要求什么铸造就在做。我真的很想知道这样做有什么好处 - 如果有的话 - 或者他只是在浪费时间和精力去做这件事情?

回答

4

有几个好处。

  1. 类型检查。没有类型检查,0 == false和1 == true。
  2. 消毒。如果将值插入到SQL查询中,则不能进行SQL注入,因为字符串值会转换为零。
  3. 完整性。它防止插入无效的数据库数据。同样,它会转换为零,因此您不会尝试将字符串插入数据库中的整数字段。
+2

+1,消毒可能是最有用的理由。 – casablanca 2010-09-05 16:24:14

1

要的值显式转换为 整数,使用(INT)或 (整数)管型。 但是,在大多数 情况下不需要投射,因为如果运算符,函数或控件 结构需要整数 参数,则 值将自动转换为 。值也可以通过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