Hprose for PHP型別對映

2021-08-25 00:24:00 字數 3356 閱讀 4834

[b][size=xx-large]基本型別[/size][/b]

[b][size=x-large]值型別[/size][/b]

[table]

|型別| 描述|

|整型| hprose中的整型為32位有符號整型數,表示範圍是-2147483648~2147483647(-231~231-1)。|

|長整型| hprose中的長整型為有符號無限長整型數,表示範圍僅跟記憶體容量有關。|

|浮點型| hprose中的浮點型為雙精度浮點型數。|

|非數| hprose中的非數表示浮點型數中的非數(nan)。|

|無窮大| hprose中的無窮大表示浮點型數中的正負無窮大數。|

|布林型| hprose中的布林型只有真假兩個值。|

|空| hprose中的空表示引用型別的值為空(null)。|

|空串| hprose中的空串表示空字串或零長度的二進位制型。|

[/table]

其中非數和無窮大其實是特殊的浮點型資料,只不過在hprose中它們有單獨的表示方式,這樣可以使它們占用更少的儲存空間,並得到更快的解析。

另乙個可能會引起您注意的是,這裡把空和空串也作為值型別對待了。這裡把它列為值型別而不是引用型別,是因為hprose中的值型別和引用型別的概念與程式語言中的概念不完全相同。這裡的值型別是表示在hprose序列化過程中,不做引用計數的型別。在序列化過程中,當遇到相等的值型別時,後寫入的值將與先寫入的值保持相同的形式,而不是以引用的形式寫入。

[b][size=x-large]引用型別[/size][/b]

[table]

|型別| 描述|

|二進位制型| hprose中的二進位制型表示二進位制資料,例如位元組陣列或二進位制字串。|

|字串型| hprose中的字串型表示unicode字串資料,以標準utf-8編碼儲存。|

|日期型| hprose中的日期型表示年、月、日,年份範圍是0~9999。|

|時間型| hprose中的時間型表示時、分、秒(毫秒,微秒,毫微秒為可選部分)。|

|日期時間型| hprose中的日期時間型表示某天的某個時刻,可表示本地或utc時間。|

[/table]

空字串和零長度的二進位制型並不總是表示為空串型別,在某些情況下它們也表示為各自的引用型別。空串型別只是對二進位制型和字串型的特殊情況的一種優化表示。

引用型別在hprose中有引用計數,在序列化過程中,當遇到相等的引用型別時,後寫入的值是先前寫入的值的引用編號。

後面介紹的容器型別和物件型別也都屬於引用型別。

[b][size=x-large]基本型別的對映[/size][/b]

php型別與hprose型別的對映關係不是一一對應的。在序列化和反序列化過程中可能會有一種php型別對應多種hprose型別的情況出現(當然條件會有不同)。我們下面以列表的形式來說明。

[b][size=large]序列化型別對映[/size][/b]

[table]

|php型別| hprose型別|

|整數| 整型|

|純數字字串| 長整型|

|浮點數| 浮點型|

|is_nan為true的浮點數| 非數|

|is_infinite為true且大於0的浮點數| 正無窮大|

|is_infinite為true且小於0的浮點數| 負無窮大|

|true| 布林真|

|false| 布林假|

|null| 空|

|非utf8字串| 二進位制型(或空串)|

|utf8字串| 字串型(或空串)|

|hprosedate物件| 日期型|

|hprosetime物件| 時間型|

|hprosedatetime物件| 日期時間型|

[/table]

[b][size=large]反序列化型別對映[/size][/b]

預設型別是指在對hprose資料反序列化時,在不指定型別資訊的情況下得到的反序列化結果型別。

[table]

|hprose型別| php型別|

|整型| 整數|

|長整型| 純數字字串|

|浮點型| 浮點數|

|非數| 浮點數中的nan|

|正無窮大| 浮點數中的正無窮大|

|負無窮大| 浮點數中的負無窮大|

|布林真| true|

|布林假| false|

|空| null|

|空串| ""|

|二進位制型| 字串|

|字串型| utf8編碼的字串|

|日期型| hprosedate物件|

|時間型| hprosetime物件|

|日期時間型| hprosedatetime物件|

[/table]

[b][size=xx-large]容器型別[/size][/b]

hprose中的容器型別包括列表型別和字典型別兩種。它們都對應於php的陣列型別。

[b][size=x-large]列表型別[/size][/b]

任何以從0開始的連續整數作為索引的陣列,都被對映為hprose列表型別。例如:

$array = array(1, 2, 3, 4, 5);

陣列是否對映為列表型別只與索引有關,與元素值無關,所以元素值可以是同一種型別,也可以是不同型別。

[b][size=x-large]字典型別[/size][/b]

所有除對映為hprose列表型別以外的陣列型別均對映為hprose字典型別,例如:

$a = array( 1 => 'one', 2 => 'two', 3 => 'three' );

$map = array( 'version' => 4,

'os' => 'linux',

'lang' => 'english',

'short_tags' => true

);

都被對映為hprose字典型別。

另外php的stdclass物件也被對映為字典型別,例如從資料庫中查詢出的每一行資料。

[b][size=xx-large]物件型別[/size][/b]

php中自定義類的物件例項在序列化時被對映為hprose物件型別。自定義類中的欄位名,對映為hprose物件型別中的屬性名,自定義類中的字段值,對映為hprose物件型別中的屬性值。所有的字段必須為可序列化型別,在php中除了資源型別以外的其它型別均為可序列化型別。

[color=red]php中通過在類名中使用下滑線來定義與其它帶有名空間的語言對應的類,例如php中定義的my_namespace_classname與c#中的my.namespace.classname類是相對應的。另外,類名(包括名空間部分)是區分大小寫的。[/color]

Hprose for php 快速入門(二)

1.客戶端 client 記得該引入的檔案記得引入,我這邊是用yii框架且composer安裝hprose,會自動載入所以沒有寫引入的 public function actionhprose 成功的標誌 如圖所示 2.服務端 server 如用框架,得將csrf,七七八八驗證關掉,不然客戶端不能成...

hibernate 帶下標值的列舉型別的對映

1 對於普通的列舉值對映 可以使用註解 enumerated即可 2 當要使用帶有下標值的列舉型別時,可以通過註解 type指定 不過在 type註解中,要指定具體的型別 此型別要繼承hibernate提供的usertype介面,相當於自定義一種型別。實現usertype介面中的方法,此方法可以幫助...

Entity Framework 簡單屬性對映

本節我們只介紹在ef中比較常見的對映 零 表名對映 預設情況下可以不配置表名,我們的模型名稱將會作為資料庫的表名。但是大部分專案會要求資料庫表名稱的規範,例如我們要將模型user在資料庫中對映為users,那麼我們可以這麼做,在派生類上下文中的onmodelcreating中進行如下定義 model...