PHP跟其他强类型语言不一样,在定义变量时不需要指定变量的类型或者说不支持。变量的类型是根据你赋值给这变量的类型有关。如果你把一个 String 类型的变量赋值给
$var
那$var
就是字符串类型,然后在将一个 Int 类型赋值给$var
,那它就是int
类型。也就说$var
的类型取决于赋值给它的值的类型。所以不能指定$var
为一个指定类型,或者说你不能指定$var
只接受指定的类型 (当然你可以使用强制转换为你要的类型)
PHP中的假值和真值
第一次听到真值和假值是在 《JavaScript权威指南》 这本书中看到的,这是指真值和假值得概念 ,那按照官方文档中所说的假值应该有如下:(当需要转换为 boolean 时,以下值被认为是 FALSE)
- 布尔值 FALSE 本身
- 整型值 0(零)
- 浮点型值 0.0(零)
- 空字符串,以及字符串 “0”
- 不包括任何元素的数组
- 不包括任何成员变量的对象(仅 PHP 4.0 适用)
- 特殊类型 NULL(包括尚未赋值的变量)
- 从空标记生成的 SimpleXML 对象
其他所有的值都会转换成 true
也就是真值。
-1 和其它非零值(不论正负)一样,被认为是 TRUE!
扩展
判断一个变量是否为空
if ($var) {}
if (empty($var)) {}
|
|
第一个 if ($var) {}
,if 后面需要一个布尔值来判断是否需要执行下面的代码,所以 PHP 会主动的将 $var 转换为布尔值(已经是bool值得话就不会转了),转换规则就是前面所说的真假值。
第二个 if (empty($var)) {}
, empty()
会返回一个布尔值,所以我们只要看empty()函数的处理规则
判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。
以下值会被认为空:
- “” (空字符串)
- 0 (作为整数的0)
- 0.0 (作为浮点数的0)
- “0” (作为字符串的0)
- NULL
- FALSE
- array() (一个空数组)
- $var; (一个声明了,但是没有值的变量)
根据官方文档中所说它的值等同于FALSE,那么就会被认为不存在,那就会返回 TRUE。那不是跟直接使用第一种方法一样了吗? 但是但是它还说了当该变量不存在时也会返回 TRUE 所以这就是它们的区别。当你用 if
去判断一个不存在的变量是会有个 Notic
的报错,而 empty
并不会报错。恩所以我们在编程的时候为了严谨还是建议使用第二种好 (除非你能保证你需要判断的变量之前肯定声明过)