如何理解PHP是弱类型语言

本文介绍了PHP中的变量类型包括标量、复杂及特殊类型,并详细解释了PHP如何使用zval结构体来存储变量,以及字符串的二进制安全性。同时探讨了变量符号表与zval值之间的映射关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们一般说php变量类型8种

标量类型:布尔boolean,整形integer,浮点float,字符string

复杂类型:数组array,对象object

特殊类型:资源resource,空null

php底层所有变量都是以结构体zval来实现


其中refcount__gc和is_ref__gc表示变量是否是一个引用。type字段标识变量的类型,type的值可以是:

IS_NULL,IS_BOOL,IS_LONG,IS_FLOAT,IS_STRING,IS_ARRAY,IS_OBJECT,IS_RESOURCE。PHP

根据type的类型,来选择如何存储到zvalue_value。 

C语言中,用"\0"作为字符串结束符。也就是说一个字符串"Hello\0World"在C语言中,用printf来输出的话,只能输出hello,因为"\0"会认为字符已经结束。PHP中是通过结构体的_zval_value.str.len来控制字符串长度,相关函数不会遇到"\0"结束。所以PHP的字符串是二进制安全的。

变量的符号表与zval的值的映射是通过HashTable实现的。

例如:$val = 'helloworld'; $val的变量名存储在变量符号表中,代表$val的类型和值的zval结构存储在哈希表中,内

核通过变量的符号表与zval地址的哈希映射,来实现PHP变量的存取。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值