PHP变量类型强制转换怎么写_PHP变量类型转换语法【操作】

2次阅读

php强制类型转换用括号语法如(int)、(bool),不改变原变量;(int)字符串时从头截取数字,对象转数组仅含public属性,isset()检查存在性而(bool)只转值。

PHP变量类型强制转换怎么写_PHP变量类型转换语法【操作】

PHP中强制转换变量类型的写法

PHP支持用括号包裹类型名的方式做强制类型转换,这是最常用、最直接的方法。它不是函数调用,不改变原变量,只返回新类型的值。

  • (int)(Integer) 效果相同,转整型(截断小数,非四舍五入)
  • (bool)(Boolean):空字符串、00.0NULL、空数组转为 false,其余基本为 true
  • (String):数字转字符串时无歧义,但资源、对象会触发 Notice 或返回固定字符串(如 "Resource id #123"
  • (Array):标量转数组会包一层,null 转成空数组,对象转数组会把 public 属性变成键值对

为什么 (int) “123abc” 得到 123 而不是报错

PHP的类型转换是“宽松”的,(int) 会从字符串开头尽可能解析数字,遇到非数字字符就停。这不是 bug,是设计行为。

  • (int) "123abc"123
  • (int) "abc123"0(开头无数字)
  • (int) " 456 "456(自动 trim 空格)
  • 若需严格校验,应先用 is_numeric() 或正则,再转换

isset() 和 (bool) 在判断真假时的区别

两者目的相似,但机制完全不同:isset() 检查变量是否存在且不为 null(bool) 是纯值转换,不关心变量是否定义。

  • var_dump((bool) $undefined); → 触发 Notice:Undefined variable
  • var_dump(isset($undefined));false,无警告
  • isset($x) 不等价于 (bool) $x:比如 $x = 0isset($x)true(bool) $xfalse
  • 判断“有值且为真”要组合使用,比如 isset($x) && $x

对象转数组时 public 属性以外的内容去哪了

(array) 强转对象,只会把 public 属性转为数组元素。protectedprivate 属性会被加上类名前缀(不可见字符包裹),实际存在但难以访问。

立即学习PHP免费学习笔记(深入)”;

  • (array) new StdClass()[]
  • private 属性 $foo 在转出数组里键名为 "*foo",不是普通字符串
  • 想完整导出对象结构,用 get_object_vars() 更安全(只返回 public)
  • 需要序列化/传输时,优先考虑 json_encode() 或自定义 JsonSerializable 接口

类型转换看着简单,但隐含行为很多:字符串开头解析、对象属性可见性、null0 的真假混淆……真正写业务时,别依赖自动转换,该校验的校验,该断言的断言。

text=ZqhQzanResources