博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php类型转换以及类型转换的判别
阅读量:4983 次
发布时间:2019-06-12

本文共 4456 字,大约阅读时间需要 14 分钟。

部分摘自

PHP 在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个 string 值赋给变量 $var,$var 就成了一个 string。如果又把一个integer 赋给 $var,那它就成了一个integer。

PHP 的自动类型转换的一个例子是加法运算符“+”。如果任何一个操作数是float,则所有的操作数都被当成float,结果也是float。否则操作数会被解释为integer,结果也是integer。注意这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。

PHP允许的强制转换

(int), (integer) - 转换为整形 integer

(bool), (boolean) - 转换为布尔类型 boolean
(float), (double), (real) - 转换为浮点型 float
(string) - 转换为字符串 string
(array) - 转换为数组 array
(object) - 转换为对象 object
(unset) - 转换为 NULL (PHP 5)

字符串转为数值

如果该字符串没有包含 '.','e' 或 'E' 并且其数字值在整型的范围之内(由 PHP_INT_MAX 所定义),该字符串将被当成 integer 来取值。其它所有情况下都被作为 float 来取值。

该字符串的开始部分决定了它的值。如果该字符串以合法的数值开始,则使用该数值。否则其值为 0(零)。合法数值由可选的正负号,后面跟着一个或多个数字(可能有小数点),再跟着可选的指数部分。指数部分由 'e' 或 'E' 后面跟着一个或多个数字构成。

1 
22 结果 类型23 11.5 double24 11 integer25 -1299 double26 1 integer27 100 integer28 100.9 double

转为整型

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

从布尔值转换

FALSE 将产生出 0(零),TRUE 将产生出 1(壹)。

从浮点型转换

当从浮点数转换成整数时,将向下取整。

转为字符串型

一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。在一个需要字符串的表达式中,会自动转换为 string。比如在使用函数 echo 或 print 时,或在一个变量和一个 string 进行比较时,就会发生这种转换。类型和类型转换可以更好的解释下面的事情,也可参考函数 settype()。

一个布尔值 boolean 的 TRUE 被转换成 string 的 "1"。Boolean 的 FALSE 被转换成 ""(空字符串)。这种转换可以在 boolean 和 string 之间相互进行。

一个整数 integer 或浮点数 float 被转换为数字的字面样式的 string(包括 float 中的指数部分)。使用指数计数法的浮点数(4.1E+6)也可转换。

Note:

在脚本的区域(category LC_NUMERIC)中定义了十进制小数点字符。参见 setlocale()。
数组 array 总是转换成字符串 "Array",因此,echo 和 print 无法显示出该数组的内容。要显示某个单元,可以用 echo $arr['foo'] 这种结构。要显示整个数组内容见下文。

在 PHP 4 中对象 object 总是被转换成字符串 "Object"。

资源 resource 总会被转变成 "Resource id #1" 这种结构的字符串,其中的 1 是 PHP 在运行时分配给该 resource 的唯一值。不要依赖此结构,可能会有变更。要得到一个 resource 的类型,可以用函数 get_resource_type()。

NULL 总是被转变成空字符串。

如上面所说的,直接把 array,object 或 resource 转换成 string 不会得到除了其类型之外的任何有用信息。可以使用函数 print_r() 和 var_dump() 列出这些类型的内容。

1 

转为数组型

对于任意 integer,float,string,boolean 和 resource 类型,如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为 0,该元素即为此标量的值。换句话说,(array)$scalarValue 与 array($scalarValue) 完全一样。

如果一个 object 类型转换为 array,则结果为一个数组,其单元为该对象的属性。键名将为成员变量名,不过有几点例外:整数属性不可访问;私有变量前会加上类名作前缀;保护变量前会加上一个 '*' 做前缀。这些前缀的前后都各有一个 NULL 字符。

NULL为空数组

1 
10 7 ) 8 */ 9 print_r((array)100.09);10 /*11 Array12 (13 [0] => 100.0914 )15 */16 17 print_r((array)0);18 /*19 Array20 (21 [0] => 022 )23 */24 print_r((array)-10);25 /*26 Array27 (28 [0] => -1029 )30 */31 print_r((array)'string');32 /*33 Array34 (35 [0] => string36 )37 */38 print_r((array)'0');39 /*40 Array41 (42 [0] => 043 )44 */45 print_r((array)true);46 /*47 Array48 (49 [0] => 150 )51 */52 print_r((array)FALSE);53 /*54 Array55 (56 [0] => 57 )58 */59 print_r((array)NULL);60 /*61 Array62 (63 )64 */65 66 class A67 {68 private $_A = 'A'; #私有69 protected $B; #受保护的70 }71 72 class B extends A73 {74 public $C; #公有75 public function __construct()76 {77 $this->B = 'B';78 $this->C = 'C';79 }80 }81 print_r((array) new B());82 /*83 Array84 (85 [C] => C86 [A_A] => A,私有变量前面会加上类名作为前缀87 [*B] => B,受保护变量回家上*作为前缀88 )89 */90 ?>

 

转为布尔型

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

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 is undefined 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

 

 

对null的判断

1 
16 $var == null , bool(true)17 18 $var == 'null' , bool(false)19 20 is_null($var) , bool(true)21 22 -------------------------------------23 $var == null , bool(true)24 25 $var == 'null' , bool(false)26 27 is_null($var) , bool(true)28 29 -------------------------------------30 $var == null , bool(false)31 32 $var == 'null' , bool(true)33 34 is_null($var) , bool(false)35 36 -------------------------------------

 

转载于:https://www.cnblogs.com/yingnan/p/4595827.html

你可能感兴趣的文章
咳 第一次作业(实验体)
查看>>
[python]Mongodb
查看>>
octotree神器 For Github and GitLab 火狐插件
查看>>
Loj 6285. 数列分块入门 9
查看>>
7.9 动态规划——摆花
查看>>
题解 P4949 【最短距离】
查看>>
BZOJ 1592: [Usaco2008 Feb]Making the Grade 路面修整
查看>>
整体二分 HDU - 5808
查看>>
SPark SQL编程初级实践
查看>>
C++ malloc 和 new 的函数说明
查看>>
Gym - 101350A Sherlock Bones(思维)
查看>>
莫队算法板子
查看>>
Tensor flow 实战Google深度学习框架 笔记摘要Ptwo
查看>>
rest_framework之渲染器
查看>>
有状态服务和无状态服务
查看>>
iOS:检测多媒体(相机、相册、麦克风)设备权限,弹框提示
查看>>
Linux 下修改配置实现在当前目录下寻找可执行文件
查看>>
css3 appearance在iphone上面的问题
查看>>
Linux常用命令(第二版) --权限管理命令
查看>>
webStorm常用快捷键
查看>>