PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个字符串值赋给变量 $var,$var 就成了一个字符串。如果又把一个整型值赋给 $var,那它就成了一个整数。
PHP 自动类型转换的一个例子是加法运算符 +。如果任何一个操作数是浮点数,则所有的操作数都被当成浮点数,结果也是浮点数。否则操作数会被解释为整数,结果也是整数。注意这并没有改变这些操作数本身的类型,改变的仅是这些操作数如何被求值以及表达式本身的类型。
var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
<?php
$str = "0"; //$str 是字符串 (ASCII 48)
$str += 2; //$str 现在是一个整数 (2)
$str = $str + 1.3; //$str 现在是一个浮点数 (3.3)
$str = 5 + "10 Little Piggies"; //$str 是整数 (15)
$foo = 5 + "10 Small Pigs"; //$str 是整数 (15)
?>
能转换为整数的类型只有:浮点数、布尔值,字符串和资源。数组、对象不能转换为数值类型。
- 1.当从 浮点数 转换成 整数 时,将向下取整(小数部分丢弃)。如果 浮点数 超出了整数范围,则结果为未定义,因为没有足够的精度给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知。
- 2.字符串(只支持十进制) 转换为 整数 时,从第一个字符开始寻找合法的 整数字符 直到 字符串结尾 或遇到 非整数字符,将找到的 字符 转换为 整数,若无合法字符,结果为 0。
- 3.null -> 0
- 4.true -> 1
- 5.false -> 0
- 6.将 resource 转换成 integer 时,结果会是 PHP 运行时为 resource 分配的唯一资源号。
PHP 7.0.0 起,NaN 和 Infinity 在转换成 integer 时,不再是 undefined 或者依赖于平台,而是都会变成零。
转换为浮点数时,除了字符串转换为浮点数时有自己的一套规则外,其他值都是先转换为整数(在能转换为整数的前提下),再转换为浮点数。
-
1.字符串 转换为 浮点数 时,从第一个字符开始寻找合法的 浮点数字符 直到 字符串结尾 或遇到 非浮点数字符,将找到的字符转换为浮点数,若无合法字符,结果为 0。
如果该 字符串 没有包含 '.','e' 或 'E' 并且其 数字值 在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。
该字符串的 开始部分 决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。
echo 0+"0xff"; //0
echo 0+"2.33"; //2.33
echo 0+"033"; //33
echo 0+"2e3"; //2000
- 1.整数 或 浮点数 转换为字符串时,直接将数值表示成字符串(十进制、小数点形式)。
- 2.true -> "1"
- 3.fakse -> ""
- 4.null -> ""
- 5.数组转换为字符串时,结果都是"Array"。
- 6.对象转换为字符串时,结果都是"Object"。
- 7.资源转换字符串时,类似"Resource id#1"这样的字符串。