现在的位置: 首页PHP技术 > 正文
PHP 强制类型转换
关键词:PHP ┊ 来源: 原创收藏

获取数据类型 :

如果想查看某个表达式的值和类型,用 var_dump()
如果只是想得到一个易读懂的类型的表达方式用于调试,用 gettype()
要查看某个类型,不要用 gettype(),而用 is_type() 函数。

■字符串转换为数值

  1. 当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值。
  2. 如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值。否则就被当作整数。
  3. 该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。
不要指望在将一个字符转换成整型时能够得到该字符的编码(可能也会在 C 中这么做)。如果希望在字符编码和字符之间转换,请使用 ord() 和 chr() 函数。


■强制类型强制转换 (参考:PHP手册)

PHP 中的类型强制转换和 C 中的非常像:在要转换的变量之前加上用括号括起来的目标类型。

允许的强制转换有:

  • (int),(integer)            - 转换成整型
  • (bool),(boolean)           - 转换成布尔型
  • (float),(double),(real)    - 转换成浮点型
  • (string)                  - 转换成字符串
  • (array)                    - 转换成数组
  • (object)                   - 转换成对象

注意在括号内允许有空格和制表符
还可以用settype ( mixed var, string type )进行强制转换.

1.强制转换为布尔值 (bool)|(boolean)

要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。

当转换为 boolean 时,以下值被认为是 FALSE:

布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串和字符串 "0"
没有成员变量的数组
没有单元的对象(仅适用于 PHP 4)
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(包括任何资源)。

?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>

    2.强制转换为整形(int)|(integer)
要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。

a.从bool转换
b.从浮点数转换     取整,超出范围,结果不定
c.从字符串转换     参看字符串转换为数值
d.从其它类型转换   先换成 bool值,再转换

决不要将未知的分数强制转换为 integer,这样有时会导致意外的结果。
<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7
?>

$str = "123.456abc7"; // (int)123
echo (int)$str;
$str = "abc123.456";   // (int)0
$str = true;           // (int)1
$str = false;          // (int)0


    3.强制转换为浮点型 (int)|(double)|(real)|doubleval()|floatval()|intval()
精度: 0.12345678901234 // double,real都一样
数据的丢失参 字符串转换为数值

   
    4.强制换为字符串 (string) |strval()

可以用 (string) 标记或者 strval() 函数将一个值转换为字符串。当某表达式需要字符串时,字符串的转换会在表达式范围内自动完成。例如当使用 echo() 或者 print() 函数时,或者将一个变量值与一个字符串进行比较的时候。

  • 布尔值 TRUE 将被转换为字符串 "1",而值 FALSE 将被表示为 ""(即空字符串)。这样就可以随意地在布尔值和字符串之间进行比较。
  • 整数或浮点数数值在转换成字符串时,字符串由表示这些数值的数字字符组成(浮点数还包含有指数部分)。
  • 数组将被转换成字符串 "Array",因此无法通过 echo() 或者 print() 函数来输出数组的内容。请参考下文以获取更多提示。
  • 对象将被转换成字符串 "Object"。如果因为调试需要,需要将对象的成员变量打印出来,请阅读下文。如果希望得到该对象所依附的类的名称,请使用函数 get_class()。自 PHP 5 起,如果合适可以用 __toString() 方法。
  • 资源类型总是以 "Resource id #1" 的格式被转换成字符串,其中 1 是 PHP 在运行时给资源指定的唯一标识。如果希望获取资源的类型,请使用函数 get_resource_type()。
  • NULL 将被转换成空字符串。

正如以上所示,将数组、对象或者资源打印出来,并不能提供任何关于这些值本身的有用的信息。请参阅函数 print_r() 和 var_dump(),对于调试来说,这些是更好的打印值的方法。
可以将 PHP 的值转换为字符串以永久地储存它们。这种方法被称为序列化,可以用函数 serialize() 来完成该操作。如果在安装 PHP 时建立了 WDDX 支持,还可以将 PHP 的值序列化为 XML 结构。


    4. 强制转换为数组 (array)

  • 对于任何的类型:整型、浮点、字符串、布尔和资源,如果将一个值转换为数组,将得到一个仅有一个元素的数组(其下标为 0),该元素即为此标量的值。
  • 如果将一个对象转换成一个数组,所得到的数组的元素为该对象的属性(成员变量),其键名为成员变量名。
  • 如果将一个 NULL 值转换成数组,将得到一个空数组。

    
    5. 转换为对象 (object)

如果将一个对象转换成对象,它将不会有任何变化。如果其它任何类型的值被转换成对象,内置类 stdClass 的一个实例将被建立。如果该值为 NULL,则新的实例为空。数组转换成对象将使键名成为属性名并具有相对应的值。对于任何其它的值,名为 scalar 的成员变量将包含该值


    6. 转换为资源 (无法转换)
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此无法将其它类型的值转换为资源。

■PHP 类型比较表(看手册附录P)
以下的表格显示了 PHP 类型和比较运算符在松散和严格比较时的作用。该补充材料还和类型戏法的相关章节内容有关。

  • 注意
  • HTML 表单并不传递整数、浮点数或者布尔值,它们只传递字符串。要想检测一个字符串是不是数字,可以使用 is_numeric() 函数。
  • 在没有定义变量 $x 的时候,诸如 if ($x) 的用法会导致一个 E_NOTICE 级别的错误。所以,可以考虑用 empty() 或者 isset() 函数来初始化变量。
相关文章
    暂无相关文章
本文由 匿名网友 发布于 3219天 2小时 25分钟前,目前已有 62181 人浏览
欢迎大家转载分享,请注明来源及链接;商业媒体转载请获得授权,谢谢合作!
 
匿名网友: 1楼739天 5小时 32分钟前
留言是种美德,写点什么...
匿名网友: 2楼739天 5小时 31分钟前
留言是种美德,写点什么...
匿名网友: 3楼739天 5小时 31分钟前
留言是种美德,写点什么...
匿名网友: 4楼739天 5小时 31分钟前
留言是种美德,写点什么...
匿名网友: 5楼739天 5小时 31分钟前
留言是种美德,写点什么...
匿名网友: 6楼739天 5小时 31分钟前
<script>alert("1");</script>
匿名网友: 7楼739天 5小时 29分钟前
留言是种美德,写点什么...
匿名网友: 8楼739天 5小时 5分钟前
%3c/a%3e%3cscript%3ealert(xss)%3c/script%3e
匿名网友: 9楼739天 2小时 9分钟前
123'> <img src='#' onerror=alert(/xss/) />
匿名网友: 10楼739天 1小时 54分钟前
' " [] : ; ,./ <>?
匿名网友: 11楼739天 1小时 34分钟前
&#x3C&#x73&#x63&#x72&#x69&#x70&#x74&#x3E &#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3B &#x3C&#x2F&#x73&#x63&#x72&#x69&#x70&#x74&#x3E
匿名网友: 12楼736天 9小时 21分钟前
test
匿名网友: 13楼736天 9小时 17分钟前
123456
匿名网友: 14楼718天 1小时 39分钟前
留言是种美德,写点什么...
匿名网友: 15楼699天 5小时 18分钟前
echo
匿名网友: 16楼696天 21小时 33分钟前
留言是种美德,写点什么...
匿名网友: 17楼659天 9小时 27分钟前
留言是种美德,写点什么...
匿名网友: 18楼655天 3小时 15分钟前
留言是种美德,写点什么...
匿名网友: 19楼640天 21小时 32分钟前
留言是种美德,写点什么...
匿名网友: 20楼626天 9小时 27分钟前
留言是种美德,写点什么...
匿名网友: 21楼615天 7小时 37分钟前
<script>alert("1");</script>
匿名网友: 22楼615天 7小时 37分钟前
留言是种美德,写点什么...
匿名网友: 23楼615天 4小时 53分钟前
留言是种美德,写点什么...
匿名网友: 24楼615天 4小时 53分钟前
留言是种美德,写点什么...
匿名网友: 25楼591天 9小时 1分钟前
留言是种美德,写点什么...
匿名网友: 26楼573天 2小时 47分钟前
留言是种美德,写点什么...
匿名网友: 27楼545天 5小时 28分钟前
留言是种美德,写点什么...
匿名网友: 28楼545天 5小时 27分钟前
留言是种美德,写点什么...
匿名网友: 29楼545天 5小时 27分钟前
留言是种美德,写点什么...
匿名网友: 30楼545天 5小时 27分钟前
留言是种美德,写点什么...
匿名网友: 31楼545天 5小时 27分钟前
留言是种美德,写点什么...
匿名网友: 32楼523天 5小时 45分钟前
<script>alert("1");</script>
匿名网友: 33楼511天 5小时 8分钟前
留言是种美德,写点什么...
匿名网友: 34楼510天 3小时 41分钟前
留言是种美德,写点什么...
匿名网友: 35楼510天 3小时 41分钟前
留言是种美德,写点什么...
匿名网友: 36楼510天 3小时 41分钟前
留言是种美德,写点什么...
匿名网友: 37楼510天 3小时 40分钟前
留言是种美德,写点什么...
匿名网友: 38楼508天 7小时 53分钟前
留言是种美德,写点什么...
匿名网友: 39楼508天 7小时 53分钟前
留言是种美德,写点什么...
匿名网友: 40楼502天 9小时 35分钟前
还好!
匿名网友: 41楼499天 5小时 16分钟前

匿名网友: 34楼10天 19小时 52分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 35楼10天 19小时 52分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 36楼10天 19小时 51分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 37楼10天 19小时 51分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 38楼9天 4分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 39楼9天 3分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 40楼3天 1小时 46分钟前
还好!
匿名网友: 42楼489天 7小时 36分钟前
留言是种美德,写点什么...
匿名网友: 43楼489天 7小时 36分钟前
留言是种美德,写点什么...
匿名网友: 44楼489天 7小时 36分钟前
留言是种美德,写点什么...
匿名网友: 45楼489天 7小时 36分钟前
留言是种美德,写点什么...
匿名网友: 46楼469天 4小时 58分钟前
留言是种美德,写点什么...
匿名网友: 47楼469天 4小时 58分钟前
留言是种美德,写点什么...
匿名网友: 48楼469天 4小时 58分钟前
留言是种美德,写点什么...
匿名网友: 49楼459天 22小时 25分钟前
留言是种美德,写点什么...
匿名网友: 50楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 51楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 52楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 53楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 54楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 55楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 56楼454天 6小时 2分钟前
留言是种美德,写点什么...
匿名网友: 57楼448天 2小时 53分钟前
留言是种美德,写点什么...
匿名网友: 58楼448天 2小时 53分钟前
留言是种美德,写点什么...
匿名网友: 59楼448天 2小时 53分钟前
留言是种美德,写点什么...
匿名网友: 60楼448天 2小时 52分钟前
留言是种美德,写点什么...
匿名网友: 61楼448天 2小时 52分钟前
留言是种美德,写点什么...
匿名网友: 62楼448天 2小时 52分钟前
留言是种美德,写点什么...
匿名网友: 63楼434天 5小时 57分钟前
留言是种美德,写点什么...
匿名网友: 64楼434天 5小时 57分钟前
留言是种美德,写点什么...
匿名网友: 65楼434天 5小时 56分钟前
<a style='color:red'>testtesttesttest</style>
匿名网友: 66楼369天 7小时 43分钟前
留言是种美德,写点什么...
匿名网友: 67楼369天 7小时 42分钟前
留言是种美德,写点什么...
匿名网友: 68楼369天 7小时 42分钟前
留言是种美德,写点什么...
匿名网友: 69楼369天 7小时 42分钟前
留言是种美德,写点什么...
匿名网友: 70楼369天 7小时 42分钟前
s---b
匿名网友: 71楼339天 8小时 29分钟前
留言是种美德,写点什么...
匿名网友: 72楼333天 5小时 15分钟前
留言是种美德,写点什么...
匿名网友: 73楼333天 3小时 4分钟前

匿名网友: 42楼156天 4小时 28分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 43楼156天 4小时 28分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 44楼156天 4小时 28分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 45楼156天 4小时 28分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 46楼136天 1小时 50分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 47楼136天 1小时 50分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 48楼136天 1小时 50分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 49楼126天 19小时 17分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 50楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 51楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 52楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 53楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 54楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 55楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 56楼121天 2小时 54分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 57楼114天 23小时 45分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 58楼114天 23小时 45分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 59楼114天 23小时 45分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 60楼114天 23小时 45分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 61楼114天 23小时 45分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 62楼114天 23小时 44分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 63楼101天 2小时 50分钟前
留言是种美德,写点什么...
0 支持 0 反对

匿名网友: 74楼290天 53分钟前
留言是种美德,写点什么...

添加评论