opcode 操作数 5 种不同的类型-php教程

资源魔 20 0
zend_op_array.opcodes 指向指令列表,详细每一条指令的构造以下:

struct _zend_op {  //  *opline  *opcodes
    const void *handler; //指令执行handler
    znode_op op1; //操作数1
    znode_op op2; //操作数类型实际就是个32位整形,它次要用于存储一些变量的索引地位、数值记载等等
    znode_op result; //前往值
    uint32_t extended_value;
    uint32_t lineno;
    zend_uchar opcode; //opcode指令
    zend_uchar op1_type; //操作数1类型
    zend_uchar op2_type;
    zend_uchar result_type; //前往值类型
};

//操作数构造
//比方赋值语句:"$a = 45;",两个操作数辨别记载"$a"、"45"的存储地位,执行时依据op2取到值"45",
//而后赋值给"$a",而"$a"的地位经过op1猎取到
//当然操作数并非全副这么用的,下面只是赋值时分的状况,其它操作会有没有同的用法
//如函数挪用时的传参,op1记载的就是通报的参数是第几个,op2记载的是参数的存储地位,
//result记载的是函数接纳参数的存储地位。
typedef union _znode_op { //操作数类型实际就是个32位整形,它次要用于存储一些变量的索引地位、数值记载等等
    uint32_t      constant; //操作数记载着以后指令的要害信息, 能够用于变量的存储、拜访
    uint32_t      var;
    uint32_t      num;
    uint32_t      opline_num; /*  Needs to be signed */
#if ZEND_USE_ABS_JMP_ADDR
    zend_op       *jmp_addr;
#else
    uint32_t      jmp_offset;
#endif
#if ZEND_USE_ABS_CONST_ADDR
    zval          *zv;
#endif
} znode_op;
//操作数有5种没有同的类型;
#define IS_CONST    (1<<0)  //字面量,编译时就可确定且没有会扭转的值,比方:$a = "hello~",此中字符串"hello~"就是常量
#define IS_TMP_VAR  (1<<1) //暂时变量 $a = "hello~" . time(),此中"hello~" . time()的值类型就是IS_TMP_VAR
                            //"123" + $b的后果类型也是IS_TMP_VAR,从这两个例子能够猜想,暂时变量可能是执行时期其它
   //类型组合现天生的一个两头值,因为它是现天生的,以是把IS_TMP_VAR赋值给IS_CV变量时没有会添加其援用计数
#define IS_VAR      (1<<2)//PHP变量
                          //这个很容易以为是PHP剧本里的变量,并不是,这里PHP变量的含意能够这样了解:PHP变量是不显
                          //式的正在PHP剧本中界说的,没有是间接正在代码经过$var_name界说的
   //。这个类型最多见的例子是PHP函数的前往值,再如$a[0]数组这类,它掏出的值也是IS_VAR,再比方$$a这类
#define IS_UNUSED   (1<<3)  /* Unused variable */   //示意操作数不用
#define IS_CV       (1<<4)  /* Compiled variable */
   //PHP剧本变量,即剧本里经过$var_name界说的变量,这些变量是编译阶段确定的,以是是compile variable

   //result_type除了了下面几品种型外另有一品种型EXT_TYPE_UNUSED (1<<5),前往值不应用时会用到,
   //这个跟IS_UNUSED的区分是:IS_UNUSED示意本操作前往值不意思(也可简略的以为不前往值),
   //而EXT_TYPE_UNUSED的含意是有前往值,然而不用到,比方函数前往值不接纳

更多PHP相干常识,请拜访PHP中文网!

以上就是opcode 操作数 5 种没有同的类型的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 opcode

抱歉,评论功能暂时关闭!