php5 3 底層變數的實現

2021-10-06 09:07:11 字數 1428 閱讀 8808

#這就是結構體

struct _zval_struct

;

type欄位的值為以下常量(列舉的常量)

is_null, is_bool,is_long,is_double

is_string,is_array,is_object

is_resource

php中的乙個變數,就是底層虛擬機器用乙個結構體來描述的

變數的值是結構體描述的

有4個字段,理解關聯陣列

zend_uint refcount__gc;:活動型別,例如,如果echo下,型別就是字串,依次類推,型別可以判斷周圍環境強制轉換的

zvalue_value value; 值在這個結構體放著呢

聯合的意思就是他們型別其中之一

#聯合的意思就是他們型別其中之一

#是dval還是val、還是指標

typedef

union _zvalue_value str;

#雜湊指標

hashtable *ht;

/* hash table value */

zend_object_value obj;

} zvalue_value;

乙個變數它的值到底是在記憶體中來實現的

乙個變數的值,這個值是什麼型別的?

答:通過type描述的,

值是多少是通過?

答:_zvalue_value聯合體來描述的

乙個變數賦值

$a = 3

/*生產乙個結構體 產生了

type is_long

refcount__gc:1

is_ref__gc :0}*/

is_null了都,value不需要了,聯合體直接null

php中有8種資料型別,為什麼zval->value 聯合體中,只有5種?

1: null,直接 zval->type = is_null,就可以表示,不必設定 value的值.

2: bool型 , zval->type = is_bool, 再設定 zval.value.lval = 1/0;

3: resourc型 ,資源型 往往是伺服器上開啟的乙個介面,如果 檔案讀取介面.

zval->type = is_resource, zval->tyoe.lval = 伺服器上開啟的介面的編號

字串的長度,直接快取在結構體當中了

$b =

'hello'

; type: is_string

refcount_gc:

1 is_ref_gc :

0}

可以看出在php中,字串的長度是直接體現在體系結構中的,strlen的速度非常塊 ,時間複雜度為0(1)

呼叫字串長度非常快

php7後續會寫

php5 3管理操作

php 5.3.3 中 php fpm 的重啟 終止操作命令 php 5.3.3 原始碼中已經內嵌了 php fpm,不用象以前的php版本一樣專門打補丁了,只需要在configure的時候新增編譯引數即可。關於php fpm的編譯引數有 enable fpm with fpm user www w...

php5 3使用手冊,php5 3 注意事項說明

php5.3 新特性1.支援命名空間 namespace 5.3以前 class zend db table select 表示當前這個類檔案位於zend db table下 5.3namespace zend db table class select 2.支援延遲靜態繫結5.3以前 class ...

php5 3使用手冊,php5 3 注意事項說明

本篇文章是對php5.3中需要注意的一些事項進行了詳細的分析介紹,需要的朋友參考下 php5.3 新特性1.支援命名空間 namespace 5.3以前 class zend db table select 表示當前這個類檔案位於zend db table下 5.3namespace zend db...