PHP7擴展開發(fā)之類型處理

前言

這次,我們將演示如何在PHP擴展中如何對類型進行一些操作通今。如琐簇,判斷變量類型。要實現(xiàn)的PHP代碼如下:

    <?php
        function get_size ($value) {
            if (is_string($value)) {
                return "string size is ". strlen($value);
            } else if (is_array($value)) {
                return "array size is ". sizeof($value);
            } else {
                  return "can not support";
            }
        }
        
        var_dump(get_size("abc"));
        var_dump(get_size(array(1,2)));
    ?>
分別獲取string 和 array的長度头朱。

代碼

基礎代碼

這個擴展运悲,我們將在say擴展上增加 get_size 方法。say擴展相關代碼大家請看這篇博文项钮。PHP7擴展開發(fā)之hello word 文中已經(jīng)詳細介紹了如何創(chuàng)建一個擴展和提供了源碼下載班眯。

實現(xiàn)get_size方法

get_size方法的PHP擴展源碼:

PHP_FUNCTION(get_size)
{
    zval *val;
    size_t size;
    char *result;
    HashTable *myht;

    if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &val) == FAILURE) {
        return;
    }   

    result = emalloc(1024);

    if (Z_TYPE_P(val) == IS_STRING) {
        size = php_sprintf(result, "string size is %d", Z_STRLEN_P(val));
    } else if (Z_TYPE_P(val) == IS_ARRAY) {
        myht = Z_ARRVAL_P(val);
        size = php_sprintf(result, "array size is %d", zend_array_count(myht));
    } else {
        size = php_sprintf(result, "can not support");
    }   
    
    RETVAL_STRINGL(result, size);
    efree(result);
}

代碼解讀

zval變量相關的宏方法大部分定義在Zend/zend_types.h文件中希停。

代碼所涉及宏方法含義:
Z_TYPE_P 獲取zval變量的類型。
Z_STRLEN_P 獲取字符串的長度署隘。

zend_array 和 HashTable其實是相同的數(shù)據(jù)結構宠能。在Zend/zend_types.h文件中有定義。

    typedef struct _zend_array HashTable;

Zend/zend_hash.c文件中包含一些array處理的方法磁餐。如:
zend_array_count

更多函數(shù)說明請查看

源碼下載

tar.gz格式下載
zip格式下載

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末违崇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诊霹,更是在濱河造成了極大的恐慌羞延,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脾还,死亡現(xiàn)場離奇詭異伴箩,居然都是意外死亡,警方通過查閱死者的電腦和手機鄙漏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門嗤谚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怔蚌,你說我怎么就攤上這事巩步。” “怎么了桦踊?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵椅野,是天一觀的道長。 經(jīng)常有香客問我钞钙,道長鳄橘,這世上最難降的妖魔是什么声离? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任芒炼,我火速辦了婚禮,結果婚禮上术徊,老公的妹妹穿的比我還像新娘本刽。我一直安慰自己,他們只是感情好赠涮,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布子寓。 她就那樣靜靜地躺著,像睡著了一般笋除。 火紅的嫁衣襯著肌膚如雪斜友。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天垃它,我揣著相機與錄音鲜屏,去河邊找鬼烹看。 笑死,一個胖子當著我的面吹牛洛史,可吹牛的內(nèi)容都是我干的惯殊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼也殖,長吁一口氣:“原來是場噩夢啊……” “哼土思!你這毒婦竟也來了?” 一聲冷哼從身側響起忆嗜,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤己儒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捆毫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體址愿,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年冻璃,在試婚紗的時候發(fā)現(xiàn)自己被綠了响谓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡省艳,死狀恐怖娘纷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跋炕,我是刑警寧澤赖晶,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站辐烂,受9級特大地震影響遏插,放射性物質發(fā)生泄漏。R本人自食惡果不足惜纠修,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一胳嘲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扣草,春花似錦了牛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至密浑,卻和暖如春蛙婴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背尔破。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工街图, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留背传,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓台夺,卻偏偏與公主長得像径玖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子颤介,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容