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カーネルは、上のマクロを利用して、より便利なマクロをパッケージします.