DevOps开发运维
成长之路

PHP中的数据类型转换

自动转换(隐式转换)

1.程序会根据上下文环境自动的进行转换

2.其它类型转换成数值型

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/>';
赞(1)

评论 抢沙发

评论前必须登录!

 

LNMP社群 不仅仅是技术

关于我们网站地图