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_r()|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() 函数来初始化变量。

PHP强制类型转换的实现方式


转 换 格 式


转 换 结 果


实 现 方 式


(int),(integer)


将其他数据类型强制转换为整型


$a = "3";$b = (int)$a;$c = (integer)$a;


(bool),(boolean)


将其他数据类型强制转换为布尔型


$a = "3";$b = (bool)$a; $c = (boolean)$a;


(float),(double),(real)


将其他数据类型强制转换为浮点型


$a = "3"; $b = (float)$a;$c = (double)$a;$d = (real)$a;


(string)


将其他数据类型强制转换为字符串


$a = 3; $b = (string)$a;


(array)


将其他数据类型强制转换为数组


$a = "3"; $b = (array)$a;


(object)


将其他数据类型强制转换为对象


$a = "3"; $b = (object)$a;

其他数据类型转换为整型


原   类   型


目 标 类 型


转 换 规 则


浮点型


整型


向下取整,即不会四舍五入而是直接去掉浮点型数据小数点后边的部分,只保留整数部分


布尔型


整型


TRUE 转换成整型数字 1 , FALSE 转换成整型数字 0


字符串


整型


字符串为纯整型数字,转换成相应的整型数字

字符串为带小数点数字,转换时去除小数点后面部分,保留整数部分

字符串以整型数字开头,转换时去除整型数字后面部分,然后按照规则 1 进行处理

字符串以带小数点数字开头,转换时去除小数后面部分,然后按规则 2 进行处理

字符串内容以非数字开头直接转换为 0

其他数据类型转换为浮点型


原 类 型


目 标 类 型


转 换 规 则


整型


浮点型


将整型数据直接转换为浮点型,数值保持不变


布尔型


浮点型


TRUE 转换成浮点型数字 1 , FALSE 转换成浮点型数字 0


字符串


浮点型


字符串为整型数字,直接转换成相应的浮点型数字

字符串以数字开头,转换时去除数字后面部分,然后按照规则 1 进行处理

字符串以带小数点数字开头,转换时直接去除数字后面部分,只保留数字部分

字符串以非数字内容开头直接转换为 0

其他数据类型转换为布尔型


原 类 型


目 标 类 型


转 换 规 则


整型


布尔型


0 转换为 FALSE ,非零的其他整型数字转换为 TRUE


浮点型


布尔型


0 转换为 FALSE ,非零的其他浮点型数字转换为 TRUE


字符串


布尔型


空字符串或字符串内容为零转换为 FALSE ,其他字符串转换为 TRUE


NULL


布尔型


直接转换为 FALSE


数组


布尔型


空数组转换为 FALSE ,非空数组转换为 TRUE

其他数据类型转换为数组


原   类   型


目 标 类 型


转 换 规 则


整型、浮点型、布尔型

字符串、资源


数组


将这几个数据类型强制转换为数组时,得到的数组只包含一个数据元素,该数据就是未转换前的数据,并且该数据的数据类型也与未转换前相同


对象


数组


转换时将对象的成员变量的名称作为各数组元素的 key ,而转换后数组每个 key 的 value 都为空,如果成员变量为私有的( private ),转换后 key 的名称为“类名 + 成员变量名”,如果成员变量为公有的( public ),转换后 key 的名称为成员变量名,如果成员变量为受保护的( protected ),转换后 key 的名称为“ *+ 成员变量名”


NULL


数组


直接转换为一个空数组

其他数据类型转换为对象


原类型


目标类型


转换规则


整型、浮点型

布尔型、字符串


对象


将其他类型变量转换为对象时,将会新建一个名为“ scalar ”的属性,并将原变量的值存储在这个属性中


数组


对象


将数组转换为对象时,数组的 key 作为对象成员变量的名称,对应各个 key 的 value 作为对象成员变量保存的值


NULL


对象


直接转换为一个空对象

其他数据类型转换为字符串


原 类 型


目 标 类 型


转 换 规 则


整型


字符串


转换时直接在整型数据两边加上双引号作为转换后的结果


浮点型


字符串


转换时直接在浮点型数据两边加上双引号作为转换后的结果


布尔型


字符串


TRUE 转换为字符串“ 1 ” , FALSE 转换为字符串“ 0 ”


数组


字符串


直接转换为字符串“ Array ”


对象


字符串


直接转换为字符串“ Object ”


NULL


字符串


直接转换为空字符串

时间: 2024-08-08 08:08:33

PHP类型转换&&类型强制转换的相关文章

【读书笔记】C#高级编程 第七章 运算符和类型强制转换

(一)运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ -- 移位运算符 << >> 比较运算符 == != < > <= >= 赋值运算符 = += -= *= /= %= &= |= ^= <<= >>= 成员访问运算符(用于对象和结构) . 索引运算符(用于数组和索引器) [] 类型转换运算符 () 条件

《C#高级编程》【第7章】运算符与类型强制转换 -- 学习笔记

       运算符编程语言的基本元素,它使得我们的代码更加的简洁明了.然而我们为了解决操作数类型不同的问题,我们又有引入了强制转换的概念.我们先看看本章的内容构成吧. 1.运算符 我们来看看一些常见的运算符: <1>条件运算符 其语法如下: Condition ? true_Expression : false_Expression 当条件Condition为真时,其将执行true_Expression,否则执行false_Expression. <2> checked 和

C语言类型强制转换

C语言类型强制转换 强制类型转换是通过类型转换运算来实现的.其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型. 目录 1基本介绍 2注意事项 1基本介绍编辑 强制类型转换是通过类型转换运算来实现的.其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型.自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换.例如: (float) a 把a转换为实型,(int)(x+y)

OC中的类型强制转换

在Objective-C中,以数字格式组成的字符串经常需要转换为NSNumber对象后再使用.例如有一个字符串对象@"111.22",需要转为NSNumber对象,最简单的方法就是这样:[NSNumber numberWithFloat:[@"111.22" floatValue]]. 这个方法先使用NSString的floatValue方法将字符串转成float,再使用NSNumber的numberWithFloat方法将结果转成NSNumber.但它有一个前提条

字符格式化输出,类型强制转换,点访问数据属性,

name = input("Name:") age = int(input("Age:"))       #类型强制转换 job = input("Job:") salary = input("Salary:") if salary.isdigit():                 #  .isdigit()用于判断数据是不是数字 salary = int(salary) msg = ''' ----------info

c语言-类型强制转换

强制转换的条件: 1.当所声明的类型不能满足所符值的变量时,需要转换声明的类型,以便能够存储变量. 例如:short存储的最大值为32767,但是所要符值大于32767时,short类型不符合,需要转换short类型.short MarSold = 61600;时就是错的. 2.丢失精度,当除以一个1.0和除以1是不同的.可能造成值的差别.整型除以整型只能得到整型,符值前先进行四舍五入后再符值.a=int/int,就算a是float但是得到是四舍五入后的值.可以将int转成float就可以得到精

java三元运算符与类型强制转换

public class yunsuanfu { public static void main(String[] args) { int a = 5; System.out.println("value is "+((a<5) ? 10.9 : 9)); } } 刚刚看到的一道面试题,第一眼看很简单,就一个三元运算符,如果你觉得输出的结果是9,那就中了这道题的陷阱了,注意下"((a<5) ? 10.9 : 9)",里面有一个10.9,而后面跟了一个9,

C++类型强制转换&lt;转&gt;

转载:http://www.cnblogs.com/goodhacker/archive/2011/07/20/2111996.html C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a.C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. const_cast,字面上理解就是去const属性.static_cast,命名上理解是静态类型转换.如int转换成char.dynamic_cast,命名上理解是动态类型转换.如子

2016.6.3类型强制转换,连接,生成数字表,子查询

--日期问题select *from orders where OrderDate > '20030525'--字符串表示日期 --cast  强制转换select *from orders where OrderDate >cast( '20030525' as datetime) --datepart 取日期中的一部分select getdate()--计算机当前的时间 select getdate(),    datepart(year,getdate()),    datepart(m