正常访问状态! 设为首页 | 加入收藏夹 | 浏览历史  
  http://www.guosp.com
 碧海澜涛居
  海纳百川,有容乃大。壁立千刃,无欲则刚!
 
 
关键词:
  网站首页 | 关于本站 | 技术资料 | 美文日志 | 读书收藏 | 影视收藏 | 软件收藏 | 摄影相册| 留言板 
  技术资料 >> PHP资料库 关闭(快捷键alt+C)
搜索标签: 字符 强制转换
PHP 中的类型强制转换 字符转数值
[阅读次数:1020次]  [发布时间:2011年4月27日]

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


CODE:
<?php
$foo = 10; // $foo is an integer
$bar = (boolean) $foo; // $bar is a boolean
?>

允许的强制转换有:
(int),(integer) - 转换成整型
(bool),(boolean) - 转换成布尔型
(float),(double),(real) - 转换成浮点型
(string) - 转换成字符串
(array) - 转换成数组
(object) - 转换成对象
注意在括号内允许有空格和制表符,所以下面两个例子功能相同:


CODE:
<?php
$foo = (int) $bar;
$foo = ( int ) $bar;
?>

注意: 为了将一个变量还原为字符串,还可以将变量放置在双引号中。

 


<?php
$foo = 10;          // $foo is an integer
$str = "$foo";        // $str is a string
$fst = (string) $foo; // $fst is also a string
// This prints out that "they are the same"
if ($fst === $str) {
echo "they are the same";
}
?>

转换为布尔值

要明示地将一个值转换成 boolean,用 (bool) 或者 (boolean) 来强制转换。但是很多情况下不需要用强制转换,因为当运算符,函数或者流程控制需要一个 boolean 参数时,该值会被自动转换。
当转换为 boolean 时,以下值被认为是 FALSE:
布尔值 FALSE
整型值 0(零)
浮点型值 0.0(零)
空白字符串和字符串 "0"
没有成员变量的数组
没有单元的对象(仅适用于 PHP 4)
特殊类型 NULL(包括尚未设定的变量)
所有其它值都被认为是 TRUE(-1 和其它非零值(不论正负)一样,被认为是 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)
?>

转换为整形

要明示地将一个值转换为 integer,用 (int) 或 (integer) 强制转换。不过大多数情况下都不需要强制转换,因为当运算符,函数或流程控制需要一个 integer 参数时,值会自动转换。还可以通过函数 intval() 来将一个值转换成整型。
从布尔值转换
FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。
从浮点数转换
当从浮点数转换成整数时,数字将被取整(丢弃小数位)。
如果浮点数超出了整数范围(通常为 +/- 2.15e+9 = 2^31),则结果不确定,因为没有足够的精度使浮点数给出一个确切的整数结果。在此情况下没有警告,甚至没有任何通知!
在 Linux 下返回结果是最小负数(-2147483648),而在 Windows 下返回结果是零(0)。
决不要将未知的分数强制转换为 integer,这样有时会导致意外的结果。[

 


<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
?>

从字符串转换:参见字符串转换为数字。
从其它类型转换:小心没有定义从其它类型转换为整型的行为。目前的行为和值先转换为布尔值一样。不过不要依靠此行为,因为它会未加通知地改变。

转换为浮点数

如果希望了解有关何时和如何将字符串转换成浮点数的信息,请查阅“将字符串转换为数值”一节。对于其它类型的值,其情况类似于先将值转换成整型,然后再转换成浮点。请参阅“转换为整型”获取更多信息。自 PHP 5 起,如果试图将对象转换为浮点数,会发出一条通知。

字符串转换为数值

当一个字符串被当作数字来求值时,根据以下规则来决定结果的类型和值。
如果包括“.”,“e”或“E”其中任何一个字符的话,字符串被当作 float 来求值。否则就被当作整数。
该值由字符串最前面的部分决定。如果字符串以合法的数字数据开始,就用该数字作为其值,否则其值为 0(零)。合法数字数据由可选的正负号开始,后面跟着一个或多个数字(可选地包括十进制分数),后面跟着可选的指数。指数是一个“e”或者“E”后面跟着一个或多个数字。

 


<?php
$foo = 1 + "10.5";             // $foo is float (11.5)
$foo = 1 + "-1.3e3";              // $foo is float (-1299)
$foo = 1 + "bob-1.3e3";           // $foo is integer (1)
$foo = 1 + "bob3";             // $foo is integer (1)
$foo = 1 + "10 Small Pigs";    // $foo is integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo is float (14.2)
$foo = "10.0 pigs " + 1;       // $foo is float (11)
$foo = "10.0 pigs " + 1.0;        // $foo is float (11)
?>
<?php
echo "\$foo==$foo; type is " . gettype ($foo) . "<br />\n";
?>

不要指望在将一个字符转换成整型时能够得到该字符的编码(可能也会在 C 中这么做)。如果希望在字符编码和字符之间转换,请使用 ord() 和 chr() 函数。


字符串转换

可以用 (string) 标记或者 strval() 函数将一个值转换为字符串。当某表达式需要字符串时,字符串的转换会在表达式范围内自动完成。例如当使用 echo() 或者 print()函数时,或者将一个变量值与一个字符串进行比较的时候。阅读手册中有关类型和类型戏法中的部分有助于更清楚一些。参见 settype()。
布尔值 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 结构。

转换为数组

对于任何的类型:整型、浮点、字符串、布尔和资源,如果将一个值转换为数组,将得到一个仅有一个元素的数组(其下标为 0),该元素即为此标量的值。
如果将一个对象转换成一个数组,所得到的数组的元素为该对象的属性(成员变量),其键名为成员变量名。
如果将一个 NULL 值转换成数组,将得到一个空数组。
比较
有可能通过 array_diff() 和数组运算符来比较数组。
PHP 中的数组类型有非常多的用途,例:

 

<?php
// this
$a = array( 'color' => 'red',
         'taste' => 'sweet',
         'shape' => 'round',
         'name'   => 'apple',
                      4        // key will be 0
      );
// is completely equivalent with
$a['color'] = 'red';
$a['taste'] = 'sweet';
$a['shape'] = 'round';
$a['name']   = 'apple';
$a[]        = 4;        // key will be 0
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';
// will result in the array array(0 => 'a' , 1 => 'b' , 2 => 'c'),
// or simply array('a', 'b', 'c')
?>

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


<?php
$obj = (object) 'ciao';
echo $obj->scalar;   // outputs 'ciao'
?>

转换为资源
由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此无法将其它类型的值转换为资源
PHP 类型比较表
以下的表格显示了 PHP 类型和比较运算符在松散和严格比较时的作用。
HTML 表单并不传递整数、浮点数或者布尔值,它们只传递字符串。要想检测一个字符串是不是数字,可以使用 is_numeric() 函数。
在没有定义变量 $x 的时候,诸如 if ($x) 的用法会导致一个 E_NOTICE 级别的错误。所以,可以考虑用 empty() 或者 isset() 函数来初始化变量。
表 Q.1. 用 PHP 函数对 $x 的比较
表达式    gettype() empty() is_null() isset() boolean : if($x)
$x = ""; string    TRUE     FALSE   TRUE FALSE
$x = NULL NULL    TRUE     TRUE FALSE   FALSE
var $x;    NULL    TRUE     TRUE FALSE   FALSE
$x 未定义   NULL    TRUE     TRUE FALSE   FALSE
$x=array();array    TRUE    FALSE TRUE FALSE
$x =false;   boolean   TRUE    FALSE TRUE FALSE
$x = true; boolean FALSE     FALSE TRUE TRUE
$x = 1;     integer FALSE     FALSE TRUE TRUE
$x = 42; integer FALSE     FALSE TRUE TRUE
$x = 0;     integer TRUE    FALSE TRUE FALSE
$x = -1; integer FALSE    FALSE TRUE TRUE
$x = "1";   string    FALSE    FALSE TRUE TRUE
$x = "0";   string    TRUE    FALSE TRUE FALSE
$x = "-1"; string    FALSE    FALSE TRUE   TRUE
$x="php";string    FALSE    FALSE TRUE   TRUE
$x="true";string    FALSE    FALSE TRUE   TRUE
$x="false";string    FALSE    FALSE TRUE   TRUE
表 Q.2. 用 == 进行松散比较
      TRUE FALSE   1       0    -1    "1"     "0"     "-1" NULL   array() "php"
TRUE TRUE   FALSE TRUE   FALSE TRUE   TRUE   FALSE TRUE   FALSE FALSE TRUE
FALSE   FALSE TRUE   FALSE TRUE   FALSE FALSE TRUE   FALSE TRUE   TRUE   FALSE
1       TRUE   FALSE TRUE   FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE
0       FALSE TRUE   FALSE TRUE   FALSE FALSE TRUE   FALSE TRUE   FALSE TRUE
-1        TRUE   FALSE FALSE FALSE TRUE   FALSE FALSE TRUE   FALSE FALSE FALSE
"1"    TRUE   FALSE TRUE   FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE
"0"    FALSE TRUE   FALSE TRUE   FALSE FALSE TRUE   FALSE FALSE FALSE FALSE
"-1"     TRUE   FALSE FALSE FALSE TRUE   FALSE FALSE TRUE   FALSE FALSE FALSE
NULL FALSE TRUE   FALSE TRUE   FALSE FALSE FALSE FALSE TRUE   TRUE   FALSE
array() FALSE TRUE   FALSE FALSE FALSE FALSE FALSE FALSE TRUE   TRUE   FALSE
"php"   TRUE   FALSE FALSE TRUE   FALSE FALSE FALSE FALSE   FALSE FALSETRUE
表 Q.3. 用 === 进行严格比较
      TRUE   FALSE 1        0    -1    "1"     "0"    "-1" NULL   array() "php"
TRUE   TRUE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
1        FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
0        FALSE FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE FALSE FALSE
-1    FALSE FALSE FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE FALSE
"1"     FALSE FALSE FALSE FALSE FALSE TRUE   FALSE FALSE FALSE FALSE FALSE
"0"     FALSE FALSE FALSE FALSE FALSE FALSE TRUE   FALSE FALSE FALSE FALSE
"-1" FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE   FALSE FALSE FALSE
NULL   FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE   FALSE FALSE
array()FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE   FALSE
"php" FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
PHP 3.0 注意事项: 在 PHP 3 中,字符串 "0" 被认为是非空的,这个情况在 PHP 4 中发生了改变,它将被认为是空值。





本页地址: [复制地址]
该页内容非本站原创 收藏自:http://blog.csdn.net/aosnowasp/archive/2009/08/02/4401772.aspx
返回顶部 关闭(快捷键alt+C)
评论统计(0条)| 我要评论
暂无评论内容!
我要评论 
我要评论: 带*部分需要填写
 姓名称呼: * 请填写您的姓名或呢称
联系方式: QQ,MSN,Email都可以,方便交流 (仅管理员可见)
 评论内容: * 不超过100字符,50汉字
验证码:
    
  推荐链接
  最近更新  
·Host 'XXX' is not allowed...
·Win2008或IIS7的文件上传大...
·IIS7.0上传文件限制的解决方...
·测试信息2015-03-11
·asp.net中处理图片
·ASP.NET之Web打印-终极解决...
·Asp.net下C#调用Word模版实...
·asp.net下将页面内容导入到...
·asp.net导出为pdf文件
·asp.net生成pdf文件
·FCKeditor 文本编辑器的使用...
·ASP.NET 将数据生成PDF
·asp.net2.0导出pdf文件完美...
·AspJpeg的安装与测试
·JS验证浏览器版本对IE11的支...
  热门浏览  
·IE8和IE9出现“此网页上的问...
·无线路由器密码破解,教你断...
·js替换所有回车换行符
·QQ/MSN在线交流代码
·IE弹出“中国工商银行防钓鱼...
·如何取消键盘上的一些快捷键...
·win7声音小的解决方法
·webdav漏洞的利用
·强制两端对齐的函数或者CSS...
·win7下成功安装sql server ...
·显示器分辨率调的过高导致电...
·天诺时空技术技术论坛
·js验证手机号码格式
·JS展开和收缩效果(二)
·本地计算机上的 MSSQLSERVE...
  碧海澜涛居
网站首页关于本站站长简介开发案例技术资料美文日志摄影相册读书收藏影视收藏留言板
版权所有:碧海澜涛 QQ:410436434 Email:shaopo_guo@163.com 苏ICP备15000526号
免责声明:本站为个人网站,站内所有文字、图片等各类资料均为个人兴趣爱好所收集,不用作任何商业用途,亦不保证资料的真实性,若有因浏览本站内容而导致的各类纠纷,本站也不承担任何责任。本站部分内容来自互联网,如有涉及到您的权益或隐私请联系站长解决。