PHPカーネル変数アクセスマクロ


"zval.type=IS_LONG"方式で変数のタイプを設定できますが、これは適切ではありません.PHP以降のバージョンがどのように変化するか予測できないため、以降のバージョンでtypeメンバー変数の名前歌城type_gcや他の名前では、前に書いた拡張子はこれらのバージョンに適応できません.この問題を解決するために、PHPカーネルには、次のように変数タイプにアクセスして設定する方法があります.
Z_TYPE(zval)   zval      
Z_TYPE_P(&zval)   zval      
Z_TYPE_PP(&&zval)   zval        

変数のタイプは次のように設定できます.
Z_TYPE(zval) = IS_LONG;

変数のタイプにアクセスするには、次のようにします.
if (Z_TYPE(zval) == IS_LONG) {
    printf("is long 
"
); }

これにより,後でzval構造体のtypeメンバー変数が名前を変更しても,我々の拡張は引き続き使用できる.
変数のタイプと同様に、変数の値にも対応するアクセスマクロ定義があります.次の表に示します.
を選択します.
マクロへのアクセス
整数タイプ
Z_LVAL(zval)Z_LVAL_P(&zval)Z_LVAL_PP(&&zval)
浮動小数点の種類
Z_DVAL(zval)Z_DVAL_P(&zval)Z_DVAL_PP(&&zval)
ブール型
Z_BVAL(zval)Z_BVAL_P(&zval)Z_BVAL_PP(&&zval)
文字列タイプ
取得値:Z_STRVAL(zval)Z_STRVAL_P(&zval)Z_STRVAL_PPP(&&zval)取得長さ:Z_STRLEN(zval)Z_STRLEN_P(&zval)Z_STRLEN_PP(&&zval)
配列タイプ
Z_ARRVAL(zval)Z_ARRVAL_P(&zval)Z_ARRVAL_PP(&&zval)
リソースタイプ
Z_RESVAL(zval)Z_RESVAL_P(&zval)Z_RESVAL_PP(&&zval)
上の表を使用して、変数のタイプと値を設定します.たとえば、10の整数変数lvarを作成します.
zval lvar;
Z_TYPE(lvar) = IS_LONG;
z_LVAL(lvar) = 10;

PHPスクリプトを使うと、コードに相当します.
$lvar = 10;

注意:PHPカーネルは、上のマクロを利用して、より便利なマクロをパッケージします.