スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【PHP/C】ZendAPIの関数、マクロのメモ(完全にメモ)

まずはZendAPIにふれる上でかなり重要な構造体zvalとは?
について見て行きます

このtypedefでzvalを定義している
typedef _zval_struct  zval

struct _zval_struct {
    /* Variable information */
    zvalue_value value;     /* value */
    zend_uint refcount;
    zend_uchar type;    /* active type */
    zend_uchar is_ref;
};

次に浮かび上がる疑問はzvalue_valueですが以下のような内容

typedef union _zvalue_value {
    long lval;                  /* long value */
    double dval;                /* double value */
    struct {
        char *val;
        int len;    } str;
    HashTable *ht;              /* hash table value */
    zend_object_value obj;
} zvalue_value;

という共用体のようです
さらに追いかけるとHashTableとは?となりますね

typedef struct bucket {
    ulong h;                        /* Used for numeric indexing */
    uint nKeyLength;
    void *pData;    void *pDataPtr;
    struct bucket *pListNext;
    struct bucket *pListLast;
    struct bucket *pNext;
    struct bucket *pLast;
    char arKey[1]; /* Must be last element */
} Bucket;

typedef struct _hashtable {
    uint nTableSize;
    uint nTableMask;
    uint nNumOfElements;
    ulong nNextFreeElement;
    Bucket *pInternalPointer;   /* Used for element traversal */
    Bucket *pListHead;
    Bucket *pListTail;
    Bucket **arBuckets;
    dtor_func_t pDestructor;
    zend_bool persistent;
    unsigned char nApplyCount;
    zend_bool bApplyProtection;
#if ZEND_DEBUG
    int inconsistent;
#endif
} HashTable;

という風に定義されてるようです。

ここまで追いかけてみると少しづつ見えてきました。まだまだ疑問は出てきますが。

ちなみに

typedef unsigned char zend_bool;
typedef unsigned char zend_uchar;
typedef unsigned int zend_uint;
typedef unsigned long zend_ulong;
typedef unsigned short zend_ushort;

ここらも注目ですね

さてかなり脱線しましたが、今回の主題の出会った関数やマクロのメモを以下に残しておきます。

以下に既にであった関数やマクロをメモしておきます

クラス変数(プロパティ)を読み込むための関数ですね
(1)zend_read_propery
【args】
zend_class_entry * scope
zval * object
char * name
int name_length
zend_bool  silent  TSRMLS_DC
【return】
zval *

(2)Z_OBJCE_P
#define Z_OBJCE(zval)            zend_get_class_entry(&(zval) TSRMLS_CC)
#define Z_OBJCE_P(zval_p)  Z_OBJCE(*zval_p)

(3)Z_OBJPROP_P
#define Z_OBJPROP_P(zval_p)     Z_OBJPROP(*zval_p)
#define Z_OBJPROP(zval)         Z_OBJ_HT((zval))->get_properties(&(zval) TSRMLS_CC)
#define Z_OBJ_HT(zval)          Z_OBJVAL(zval).handlers
#define Z_OBJVAL(zval)          (zval).value.obj

(4)Z_ARRVAL_P
#define Z_ARRVAL(zval)          (zval).value.ht
#define Z_ARRVAL_P(zval_p)      Z_ARRVAL(*zval_p)

(5)Z_TYPE_PP
#define Z_TYPE(zval)        (zval).type
#define Z_TYPE_P(zval_p)    Z_TYPE(*zval_p)
#define Z_TYPE_PP(zval_pp)  Z_TYPE(**zval_pp)

(6)Z_STRVAL_PP
#define Z_STRVAL_PP(zval_pp)    Z_STRVAL(**zval_pp)
#define Z_STRVAL_P(zval_p)      Z_STRVAL(*zval_p)
 #define Z_STRVAL(zval)          (zval).value.str.val
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:PHP  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。