1. 程式人生 > >如何理解PHP是弱型別語言

如何理解PHP是弱型別語言

首先,我們一般說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變數的存取。