代潇瑞博客

php中各数据类型之间的转换规则

| 点击次数:12295

php是弱类型语言,用的时候不需要定义变量的类型,代码执行的时候zend虚拟机会根据相应的场景进行自动转换。比如:$a = "5" + 10,执行的时候,php zend引擎发现相加的一部分为字符串,则会试图将此字符串转为数值类型,然后再与后面的值相加。


除了自动类型转换,php还提供了一套强制的转换方式,平时开发的过程中经常有遇到的,如下:



无论是自动类型转换还是强制类型转换,这些并非万能的,有些类型之间是无法转换的,比如无法将任何其他类型转为资源类型。


###### 以下是php中各类型之间相互转换的规则 ######


1、其他类型转换为NULL


这类转换比较简单,任何类型都可以转为NULL,转换时直接将zval(PHP底层C中定义变量的变量)类型设置为IS_NULL。


2、其他类型转为布尔类型boolean


当转为布尔类型的时候,根据原值的true、false决定转换后的结果。比如资源类型、对象转为true,而以下值会被认为是false:



3、其他类型转为整型



4、其他类型转为浮点型


除了字符串类型外,其他类型转换规则与整型基本一致,只是在整型转换结果上加了一个小数位。


5、其他类型转为字符串


一个值可以通过在其前面加上(string)或者用strval()函数来转变成字符串。在一个需要字符串的表达式中,会自动转为string,比如在使用函数echo或者print时,或在一个非string类型的变量和一个string类型变量进行比较的时候,就会发生这种转换。以下是具体转换规则:




6、其他类型转为数组


class rui{
	private $a = 123;
	public $b = 456;
	protected $c = 'abc';

	public function dai()
	{
		echo '666';
	}
}

$obj = new rui();
print_r( (array)$obj );

输出:

Array
(
    [ruia] => 123
    [b] => 456
    [*c] => abc
)


其实前缀的前后还包含一些特殊字符,如下图所示:


微信截图_20180416233140


7、其他类型转换为对象


其他任何类型的值被转换为对象,将会创建一个内置类stdClass的实例:


【相关推荐】

触屏版 | 电脑版

Copyright © 2013 代潇瑞博客手机版

QQ: 446673330

粤ICP备13071969号-1