如何理解PHP是弱类型语言

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

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

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

特殊类型:资源resource,空null

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

如何理解PHP是弱类型语言_第1张图片

其中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变量的存取。

你可能感兴趣的:(PHP)