php 判断数据类型 自动/强制 类型转换

在这里插入图片描述

使用is_* 系列函数。 is_types这一系列的函数,来进行判断某个东西是不是某个类型。如果是这个类型返回真,不是这个类型返回假。

is_int 是否为整型
is_bool 是否为布尔
is_float 是否是浮点
is_string 是否是字符串
is_array 是否是数组
is_object 是否是对象
is_null 是否为空
is_resource 是否为资源
is_scalar 是否为标量
is_numeric 是否为数值类型
is_callable 是否为函数

is_* 系列函数有个特点,就是如果是这个类型就返回的是真。不是这个数据类型就返回的是假

	$fo = false;
	
	if(is_bool($fo)){
	    echo '执行真区间';
	}else{
	    echo '执行假区间';
	}
	
	
	//检查未声明的变量$p是否为空,为空就执行真区间
	if(is_null($p)){
	    echo '执行真区间';
	}else{
	    echo '执行假区间';
	}
	echo "<br/>";
	
	//字符串类型的数值,看看执行的是真还是假
	$str = '18.8';
	if(is_numeric($str)){
	    echo '执行真区间';
	}else{
	    echo '执行假区间';
	}
	echo "<br/>";
	//把sca的值换成整型、浮点、布尔和字符串试试
	$sca = true;
	//如果为标量,执行真区间
	if(is_scalar($sca)){
	    echo '执行真区间';
	}else{
	    echo '执行假区间';
	}
	echo "<br/>";
	//换成echo,is_int试试,为什么echo执行假区间呢?
	if(is_callable('var_dump')){
	    echo '执行真区间';
	}else{
	    echo '执行假区间';
	}
	
	?>

在这里插入图片描述

类型转换:

<?php
//布尔变整型参与运算
$num = true;
$result = $num + 10;
//$result 结果为整型的11,因为$fo 被强制转换为 1 来进行运算了
//如果$fo的值为0
var_dump($result);
//空字符串、空数组、null  都为false


//字符串类型
$str = '249字符串';
$result = $str + 1;
//结果为250。因为将$str变为了整型的249来进行运算,不过必须是第一位,放在其他位置上就没有用了。
var_dump($result);

//强调下,虽然这么做,目前执行出来的结果没有什么问题,但是如果在项目中很有可能给后期留下很大隐患,
尽量用同类型的来进行各种运算比较好!!!
?>

在这里插入图片描述

强制类型转换有三种方式:
1、 intval()、floatval()、strval()

	<?php
	    $float = 1.23;
	    $result = intval($float);
	    //看看结果是不是变了?
	    var_dump($result);
	    //整型的5
	    $yabozi = 5;
	    $re = floatval($yabozi);
	    var_dump($re);
	    //定义整型的变量
	    $yabozi = 23;
	    $bian = strval($yabozi);
	    //强制变成字符串试试
	    var_dump($bian);
	?>

2、变量前加上()里面写上类型,将它转换后赋值给其他变量


	<?php
	   //定义一个变量,我们来变化一下试试
	   $transfer = 12.8;
	   //把浮点变为整型
	    $jieguo = (int)$transfer;
	    var_dump($jieguo);
	   //把浮点变为布尔
	   $jieguo = (bool) $transfer;
	   var_dump($jieguo);
	   //把布尔变整型
	   $bool = true;
	   $jieguo = (int)$bool;
	   var_dump($jieguo);
	    //把浮点变数组
	   $fo = 250;
	   $jieguo = (array)$fo;
	   var_dump($jieguo);
	   //其他的操作方式,按照文字总结的规律你来试试
	?>

3、settype(变量,类型) 直接改变量本身

	<?php
	    //定义浮点变为整型
	    $fo = 250.18;
	   //settype第二个参数是int,你实验的时候要记得第二个参数要为字符串类型
	    settype($fo,'int');
	    //输出看看结果
	    var_dump($fo);
	?>
<think>嗯,我现在需要回答用户关于PHP强制数据类型转换的方法和用法的问题。首先,我应该回忆一下PHP中的强制类型转换方式,用户提到了(int)、(string)等转换方法,所以需要详细说明这些。 根据用户提供的引用,PHP强制转换类似于C语言,使用括号加类型名称的方式。例如,(int)$var将变量$var转换为整数。我需要列举所有可用的强制转换类型,比如(int)、(float)、(string)、(array)等等。每个类型转换的例子和结果是什么? 比如,当转换为整数时,浮点数会被截断,布尔值true变成1,false变成0,字符串如果以数字开头会取数字部分,否则为0。字符串转换的话,数字会变成字符串形式,数组可能会变成"Array",对象可能需要__toString方法。 还需要注意转换中的特殊情况,比如资源类型转换会得到资源ID,null转换为整数是0。此外,用户可能关心转换时的数据丢失问题,比如浮点转整数会丢失小数部分,或者数组转字符串的结果可能符合预期。 然后要举一些例子,比如引用中的例子$double = 20.10; (int)$double得到20。再举其他例子,比如字符串"123abc"转整数是123,布尔true转字符串是"1",false转字符串是空字符串等。 还要提到注意事项,比如转换数组为字符串会得到"Array",这可能是用户想要的,所以需要小心。对象转换如果没有__toString方法会报错,或者产生错误信息? 最后可能需要比较隐式转换和强制转换的区别,强调强制转换提高代码可读性,避免隐式转换的可预见性。用户提供的引用中也提到了这点,所以需要引用相关内容。 现在组织一下结构:先介绍强制转换的语法,然后列出所有可用类型,再逐个说明每个转换的效果,举例子,最后注意事项和总结。确保使用中文,行内公式用$...$,独立公式用$$...$$,过这里可能用到数学公式,但要注意格式要求。 检查是否有遗漏的类型,比如(object)转换,或者二进制安全相关的转换。PHP中的强制类型转换是否包括(real)?根据引用[1],(real)也是转换成浮点数的,但可能现在推荐使用(float)。需要指出这一点。 还要注意,在PHP7中有没有变化?引用[3]提到php7的强制转换,但可能没有大的变化。确保信息准确,如果有确定的地方,可能需要查阅更多资料,但根据提供的引用,应该可以覆盖。 最后生成相关问题,比如转换规则、注意事项、与隐式转换的区别、常见错误等。</think>### PHP强制数据类型转换方法与用法详解 在PHP中,强制数据类型转换通过**显式类型声明符**实现,语法形式为`(目标类型)$变量`。这种方式能明确控制变量的数据类型,提升代码可读性并减少隐式转换的潜在风险[^2][^3]。 --- #### 一、支持的强制转换类型 PHP支持以下类型转换符: 1. **整型**:`(int)` 或 `(integer)` 2. **浮点型**:`(float)`、`(double)` 或 `(real)` 3. **字符串**:`(string)` 4. **布尔型**:`(bool)` 或 `(boolean)` 5. **数组**:`(array)` 6. **对象**:`(object)` 7. **空值**:`(unset)`(PHP7.2后废弃) --- #### 二、具体转换规则与示例 1. **整型转换 `(int)`** - **规则**:浮点数截断小数,布尔值`true`转`1`、`false`转`0`,字符串取**首部连续数字**,其他类型按逻辑转换。 - **示例**: ```php $a = 20.99; echo (int)$a; // 20 $b = "123abc"; echo (int)$b; // 123 $c = true; echo (int)$c; // 1 $d = null; echo (int)$d; // 0 ``` 2. **字符串转换 `(string)`** - **规则**:数字转为字符串形式,布尔值`true`转`"1"`、`false`转空字符串,数组转为`"Array"`,对象依赖`__toString()`方法。 - **示例**: ```php $x = 42; echo (string)$x; // "42" $y = [1,2]; echo (string)$y; // "Array"(需谨慎) $z = false; echo (string)$z; // "" ``` 3. **浮点型转换 `(float)`** - **规则**:整型保留原值,字符串取首部数字(含小数点),其他逻辑与整型类似。 - **示例**: ```php $m = "3.14px"; echo (float)$m; // 3.14 $n = true; echo (float)$n; // 1.0 ``` 4. **布尔型转换 `(bool)`** - **规则**:空字符串、`0`、`null`、空数组转为`false`,其他多数情况为`true`。 - **示例**: ```php $p = ""; var_dump((bool)$p); // bool(false) $q = "0"; var_dump((bool)$q); // bool(false) ``` 5. **数组转换 `(array)`** - **规则**:标量类型转为单元素数组,对象转为属性数组。 - **示例**: ```php $r = "test"; print_r((array)$r); // [0 => "test"] ``` 6. **对象转换 `(object)`** - **规则**:数组转为`stdClass`对象,键名作为属性名。 - **示例**: ```php $s = ["a" => 1]; $obj = (object)$s; echo $obj->a; // 1 ``` --- #### 三、注意事项 1. **数据丢失风险**:如浮点转整型丢失小数部分,需谨慎操作[^2]。 2. **特殊值处理**: - `(string)null` 转为空字符串。 - 资源类型转换会得到类似`"Resource id #1"`的字符串。 3. **废弃语法**:`(unset)`在PHP7.2后已废弃,建议用`unset()`函数替代。 --- #### 四、与隐式转换的区别 强制转换通过明确语法声明意图,而隐式转换由PHP自动完成。例如: ```php $sum = "10" + 5; // 隐式转整型,结果为15 $sum = (string)"10" + 5; // 显式转字符串,但最终仍隐式转整型 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值