php类型转换分临时转换与永久修改:(int)等cast不改变原变量,仅当前表达式生效;settype()则真正修改变量类型,需检查返回值;intval()等函数行为同cast但支持额外参数;类型判断优先用is_int()而非gettype()。

PHP 里做类型强制转换,关键看你要“临时用一下”还是“真要改掉原变量”。前者用 (int) 这类 cast 操作符最轻量;后者必须用 settype(),否则改的只是副本。
用 (int)、(string) 等 cast 操作符做临时转换
这种写法不改变原变量,只在当前表达式中按需转成目标类型,适合计算、比较、传参等场景。
-
(int)对字符串:从头开始读数字,遇到非数字就停,"123abc"→123,"abc123"→0 -
(int)对浮点数:直接截断小数部分,不是四舍五入,7.99→7 -
(bool)对空数组[]是false,非空数组是true;但(int)[]得0,(int)[1]得1 -
(string)对数组永远是"Array"(注意大小写),不是 JSON 或 var_export 格式 - PHP 8 起已移除
(unset),别再用
用 settype() 改变变量本身的类型
这是唯一能真正让变量“换身份”的方式。调用后,原变量内存中的类型标识和值都会更新,后续所有操作都按新类型走。
- 第二个参数必须是字符串,比如
'int'、'string'、'boolean',不能写int(没引号会报错) - 对数组调用
settype($arr, 'int'),结果是0(空数组)或1(非空),不是取长度 - 对对象调用
settype($obj, 'array')会失败并返回false,PHP 不允许对象直转数组(得用(array)或get_object_vars()) - 成功返回
true,失败返回false,建议检查返回值,尤其处理用户输入时
用 intval()、strval() 等函数要注意什么
这些函数本质是封装好的 cast,行为跟对应括号写法一致,但多一层函数调用开销,且部分函数支持额外参数。
-
intval($var, $base)可指定进制,比如intval("1010", 2)→10;而(int)"1010"只认十进制 -
floatval()和(float)行为完全一样,没额外能力 -
boolval()是 PHP 5.5+ 加的,比(bool)更语义明确,但老版本只能用 cast -
strval()对null返回空字符串"",而(string)null也一样,没区别
判断类型别用 gettype(),优先用 is_int() 类型检查函数
gettype() 返回字符串如 "integer",性能差、易拼错、还不能用于 strict 模式下的类型断言。
- 该用
is_int($var)就别用gettype($var) === "integer" -
is_numeric()判断是否“可转为数字”,包括"123"、"-5.6"、"0x1A",但不包括"12e3"(某些版本) - 验证用户输入时,
filter_var($input, FILTER_VALIDATE_INT)比is_int((int)$input)更可靠,它不会把"123abc"当合法整数
最常被忽略的是:cast 操作符看似简单,但字符串转整型的“从头截取”规则,在处理带单位的输入(如 "100px")时极易出错;而 settype() 的返回值不检查,会导致类型转换失败却继续执行后续逻辑。这两个点,线上 bug 最爱藏在这里。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











