文章目录
自动转换(隐式转换)
1.程序会根据上下文环境自动的进行转换
2.其它类型转换成数值型
true->1
false->0
null->0
字符串如果以非法数值开始,直接转换成0;
如果字符串以合法数值开始,一直取到第一个非法数值结束
true->1 false->0 null->0 字符串如果以非法数值开始,直接转换成0; 如果字符串以合法数值开始,一直取到第一个非法数值结束
例子:
<?php echo 1+3,'<br/>';//4 echo 1+2.3,'<br/>';//3.3 echo 1+true,'<br/>';//true->1 echo 1+false,'<br/>';//false->0 echo 1+null,'<br/>';//null->0 echo 1+'3king','<br/>';//3king->3 echo 1+'2a3b4c','<br/>';//2a3b4c->2 echo 1+'21abs','<br/>';//21abs->21 echo 1+'2e2a3c'.'<br/>';//2e2a3c->200 echo 1+'true';//'true'->0
3.其它类型转换成字符串型
数值型直接转换成数值本身
true->1
false->空字符串
null->空字符串
数组->Array
资源->Resource id #数字
对象不能直接转换成字符串
例子:
<?php //其他类型转换为字符串型 echo 'king<br/>'; echo 123,'<br/>'; echo 23.4,'<br/>'; echo true,'<br/>'; echo '@',false,'@','<br/>';//空字符串 echo '@',null,'@';//空字符串 //对象不能直接转换成字符串,会报致命错误,程序终止执行 //$obj=new Stdclass(); //echo $obj;
4.其它类型转换成布尔类型
0->false
0.0->false
空字符串''或者""或者'0'或者"0"->false
null->false
空数组array()->false
例子:
<?php header('content-type:text/html;charset=utf-8'); //测试其他类型转换为布尔类型 //转换成布尔类型假的有哪些情况,其它都会转换成布尔类型的true //$dream=true; //if($dream){ // echo '买大G'; //}else{ // echo 'codeing吧'; //} $var = 123; $var = -12; $var = 1.2; $var = 0;//false $var = 0.0;//false $var = '';//false $var = "";//false $var = ' '; $var = 'false'; $var = '0';//false $var = "0";//false $var = '0.0'; $var = null;//false $var = array();//false if($var){ echo '真的'; }else{ echo '假的'; }
强制转换(显示转换)
1.临时转换
注意:临时转换不改变变量本身的类型
(变量类型)$变量名称
整型:(int)$变量名称|(integer)$变量名称
浮点型:(float|double|real)$变量名称
字符型:(string)$变量名称
布尔型:(bool|boolean)$变量名称
空:(unset)$变量名称
数组:(array)$变量名称
对象:(object)$变量名称
例子:
<?php //临时转换的例子 //转换为整型 $var = true; var_dump($var);//bool(true) echo '<br/>'; $res=(int)$var; var_dump($res);//int(1) echo '<br/>'; var_dump($var);//bool(true),临时转换不改变变量本身类型 echo '<br/>'; var_dump((int)$var,(integer)$var); echo '<br/>'; //临时转换为浮点类型 var_dump((float)$var,(double)$var,(real)$var); echo '<br/>'; //舍掉小数部分 $var = 3.6; var_dump((int)$var,(integer)$var); echo '<br/>'; //临时转换为字符串 $var=true; var_dump((string)$var); echo '<br/>'; //临时转换成布尔类型 $var = '3king'; var_dump((bool)$var,(boolean)$var); echo '<br/>'; //临时转换为空 $var = 'hello'; var_dump((unset)$var); echo '<br/>'; //临时转换为数组 $var=123; var_dump((array)$var);//array(1) { [0]=> int(123) } echo '<br/>'; //临时转换成对象 $var = 122.3; var_dump((object)$var);
通过系统函数实现
intval($var)返回变量转换成整型之后的值
floatval($var)|doubleval($var)返回变量转换成浮点型的值
strval($var)返回变量转换成字符串的值
boolval($var)返回变量转换成布尔类型的值
例子:
<?php //通过系统函数完成临时转换 $var = '3king'; $res = intval($var); var_dump($res);//int(3) echo '<br/>'; var_dump(floatval($var),doubleval($var));//float(3) float(3) echo '<br/>'; var_dump(boolval($var)); echo '<br/>';//bool(true) $var = true; var_dump(strval($var));//string(1) "1"
test.php
<?php $str = 'A3eb6'; echo floatval($str),'<br/>';//0 echo intval($str),'<br/>';//0 echo strval($str),'<br/>';//A3eb6 echo boolval($str);//1 echo '<hr/>'; $str="2e3a5s"; $arr=array(); var_dump((int)$str);//int(2) ////php版本7$str转换int类型时结果为int(2000) echo '<br/>'; var_dump((float)$str);//float(2000) echo '<br/>'; var_dump((bool)$str);//bool(true) echo '<br/>'; var_dump((unset)$str);//NULL echo '<hr/>'; var_dump((int)$arr);//int(0) echo '<br/>'; var_dump((float)$arr);//float(0) echo '<br/>'; var_dump(boolval($arr));//bool(false) echo '<br/>'; var_dump((unset)$arr);//NULL
2.永久转换
settype($var,$type)设置变量的类型
gettype($var)返回变量的类型
注意:不要使用gettype得到变量的类型,因为后续可能返回值会改变
例子:
<?php //永久转换的例子 //得到变量的类型gettype,不要使用 gettype() 来测试某种类型,因为其返回的字符串在未来的版本中可能需要改变。此外,由于包含了字符串的比较,它的运行也是较慢的。 //使用 is_* 函数代替。 $var = 123; var_dump($var);//int(123) echo '<br/>'; echo gettype($var);//integer echo '<br/>'; $var = true; echo gettype($var);//boolean echo '<hr/>'; //永久转换settype($var,type) $var = 123; var_dump($var); //int(123) echo '<br/>'; //对$var做了一个手术,变成布尔类型 settype($var,'bool'); var_dump($var);//bool(true) /* type 的可能值为: “boolean” (或为“bool”,从 PHP 4.2.0 起) “integer” (或为“int”,从 PHP 4.2.0 起) “float” (只在 PHP 4.2.0 之后可以使用,对于旧版本中使用的“double”现已停用) "string" "array" "object" “null” (从 PHP 4.2.0 起) */ echo '<br/>'; $var = '3king'; settype($var,'int'); var_dump($var);//int(3) echo '<br/>'; $var = 12.3; settype($var,'int'); var_dump($var);
3.通过变量函数库检测变量的类型
is_*($var)检测的结果要么true,要么false
----------------------------------
整型 is_int()|is_integer()|is_long()
浮点型 is_float()|is_double()|is_real()
字符串型 is_string()
布尔类型 is_bool()
标量类型 is_scalar()
空null is_null()
数组 is_array()
对象 is_object()
资源 is_resource()
是否为数值型或者字符串形式的数值 is_numeric()
type.php
<?php //通过变量函数库检测变量的类型,is_* $var = 123; var_dump(is_int($var));//bool(true) echo '<hr/>'; //检测是否为整型 $var = 0 ; var_dump( is_int($var), is_integer($var), is_long($var) ); echo '<hr/>'; //检测是否为浮点型 $var=12.3; var_dump( is_float($var), is_double($var), is_real($var) ); echo '<hr/>'; //是否为字符串型 $var = '3king'; var_dump( is_string($var) ); echo '<hr/>'; //是否是布尔类型 $var=false; var_dump( is_bool($var) ); echo '<hr/>'; //是否是标量类型 $var=123; var_dump(is_scalar($var)); echo '<hr/>'; //是否为空 $var=null; var_dump(is_null($var));//true echo '<hr/>'; //是否为数组 $var=array(); var_dump(is_array($var)); echo '<hr/>'; //是否为对象 $var=new StdClass(); var_dump(is_object($var)); echo '<hr/>'; //是否为资源 $var=fopen('./type.php','r'); var_dump(is_resource($var)); echo '<hr/>'; //是否为数值型或者是字符串形式的数值 //123 23.4 '123.34' '23' $var=123; $var=23.4; $var='0'; $var='2.3'; var_dump(is_numeric($var));
test.php
<?php $email = '10000@imooc.com'; settype($email,'int'); var_dump($email); echo '<br/>'; settype($email,'bool'); var_dump($email); echo '<br/>'; settype($email,'float'); var_dump($email); echo '<hr/>'; $str = '2hello'; $str = intval($str); var_dump($str); echo '<br/>'; $str = floatval($str); var_dump($str); echo '<br/>'; $str = boolval($str); var_dump($str); echo '<br/>';