变量

作者: 等哈哈咯 | 来源:发表于2017-08-01 11:23 被阅读0次

PHP是弱类型的,但在C这层,假设现在已经接收了参数,是要做参数类型判断的。

很简单 zval->type == "IS_BOOL" 。没错,更正确的方法应该是用宏。 类似许多工作,PHP已经做了大量的宏。

获取变量的类型 : 

Z_TYPE() ,Z_TYPE_P(),Z_TYPE_PP() ,分别是获取变量类型,获取变量类型指针,指针的指针。(Zend/zend_operators.h)

void func(zval *foo){

  if(Z_TYPE_P(foo) == "IS_BOOL"){

      php_printf("这个变量的数据类型是: BOOL");

   }

}

数据创建:

c分配内存:malloc(sizeof(zval))

正确应该是用宏:MAKE_STD_ZVAL(pzv)  。这个宏已优化的方式处理分配内存,并且自动处理内存错误。

ALLOC_INIT_ZVAL()与MAKE_STD_ZVAL(pzv)唯一区别是,第一者会将zval*数据初始化为IS_NULL。

ZVAL_NULL(pvz);         Z_TYPE_P(pzv) = IS_NULL;

ZVAL_LONG(pzv, l); Z_TYPE_P(pzv) = IS_LONG;

                                  Z_LVAL_P(pzv) = l;

ZVAL_TRUE(pzv);    ZVAL_BOOL(pzv, 1);

ZVAL_FALSE(pzv);   ZVAL_BOOL(pzv, 0);

ZVAL_BOOL(pzv, b);    Z_TYPE_P(pzv) = IS_BOOL;

                                      Z_BVAL_P(pzv) = b ? 1 : 0;

ZVAL_DOUBLE(pzv, d);          Z_TYPE_P(pzv) = IS_DOUBLE;

                                            ZVAL_DOUBLE(pzv, d);          

Z_DVAL_P(pzv) = d;

相关文章

  • mysql变量

    变量 /*系统变量:全局变量会话变量 自定义变量:用户变量局部变量 */ 一、系统变量 /*说明:变量由系统定义,...

  • mysql存储过程和函数149-169

    变量 /*系统变量:全局变量会话变量自定义变量:用户变量局部变量*/ 一、系统变量 说明:变量有系统提供,不是用户...

  • php 变量和常量

    一、变量 创建变量以 $ 开头,以 ; 结尾 可变变量从变量中解析出变量名 变量赋值 将变量b 将变量b 销毁变量...

  • Golang入门一:变量

    变量声明 变量初始化 变量赋值 变量交换 匿名变量

  • bash脚本编程-变量,变量类型

    bash变量类型: 环境变量,本地变量,位置变量,特殊变量。 本地变量: bash: VARNAME=value ...

  • MySQL(十八)变量

    系统变量:全局变量、会话变量 自定义变量:用户变量、局部变量 一、系统变量 说明:变量由系统定义,不是用户定义,属...

  • 类,变量,迭代器

    1、变量 python中实际有4种变量,分别是全局变量,类变量,实例变量,局部变量。 - 全局变量:类之外的变量,...

  • Linux下的变量

    Linux下的变量 Linux变量 Linux下的变量主要分为三种:本地变量、环境变量和位置变量本地变量本地变量是...

  • 变量及检测数据类型

    变量定义var 变量名 = 变量值; 先定义在赋值var 变量名; 变量名 = 变量值; 定义多个变量var 变量...

  • Java学习笔记-1.4.2变量的分类

    变量的分类 从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量 局部变量、成员变量、静态变量的区...

网友评论

      本文标题:变量

      本文链接:https://www.haomeiwen.com/subject/wgfjlxtx.html