PHP 中的所有变量都是被存储在 zval 变量容器中,在 zval 变量容器中主要是包含 变量名、变量值、变量类型 Type、以及另外两个额外的字段 is_ref、refcount,其中 Type 是用来标识变量的类型,它可以是 int、float、array、object等,变量的类型主要依赖于 zval.type,变量的内容根据 zval.type 存储到 zval.val 中,在 php 中进行变量转换只需要两步:
1 把 zval.val 的值或指针改变 2.再把 zval.type 的类型改变
变量转换的原理:
1.标准类型之间的转换,只需要按照上面两步进行即可
2.标准类型和资源类型之间的转换,转换成资源类型以后会被回收
3.标准类型和复杂类型之间的转换,Array 转换成 int/float,返回 Array 中元素的个数,Array 转换成 bool,返回 Array 中是否有元素,Array 转换成 string ,返回 'Array' ,抛出 warning
4.复杂类型之间的转换,array 和 object 之间可以相互转换,其他任何类型的值转换成对象,都会创建一个内置类的实例