物件屬性讀取(核心原始碼)

coder_study發表於2019-11-06
class Student{ public $level = 1; }

$s = new Student;

echo $s->level;     
 {{handler = 0x555555b4c981 <ZEND_NOP_SPEC_HANDLER>, op1 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, op2 = {constant = 0,
      var = 0, num = 0, opline_num = 0, jmp_offset = 0}, result = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, extended_value = 0,
    lineno = 3, opcode = 0 '\000', op1_type = 8 '\b', op2_type = 8 '\b', result_type = 8 '\b'}, {handler = 0x555555b4fff2 <ZEND_NEW_SPEC_CONST_HANDLER>,
    op1 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, op2 = {constant = 3, var = 3, num = 3, opline_num = 3, jmp_offset = 3},
    result = {constant = 112, var = 112, num = 112, opline_num = 112, jmp_offset = 112}, extended_value = 0, lineno = 5, opcode = 68 'D',
    op1_type = 1 '\001', op2_type = 8 '\b', result_type = 4 '\004'}, {handler = 0x555555b4a2ac <ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER>, op1 = {
      constant = 8, var = 8, num = 8, opline_num = 8, jmp_offset = 8}, op2 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, result = {
      constant = 2, var = 2, num = 2, opline_num = 2, jmp_offset = 2}, extended_value = 0, lineno = 5, opcode = 60 '<', op1_type = 8 '\b',
    op2_type = 8 '\b', result_type = 8 '\b'}, {handler = 0x555555ba3cd2 <ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER>, op1 = {constant = 80, var = 80,
      num = 80, opline_num = 80, jmp_offset = 80}, op2 = {constant = 112, var = 112, num = 112, opline_num = 112, jmp_offset = 112}, result = {
      constant = 3, var = 3, num = 3, opline_num = 3, jmp_offset = 3}, extended_value = 0, lineno = 5, opcode = 38 '&', op1_type = 16 '\020',
    op2_type = 4 '\004', result_type = 8 '\b'}, {handler = 0x555555b9bc16 <ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER>, op1 = {constant = 80, var = 80,
      num = 80, opline_num = 80, jmp_offset = 80}, op2 = {constant = 32, var = 32, num = 32, opline_num = 32, jmp_offset = 32}, result = {constant = 160,
      var = 160, num = 160, opline_num = 160, jmp_offset = 160}, extended_value = 0, lineno = 7, opcode = 82 'R', op1_type = 16 '\020',
    op2_type = 1 '\001', result_type = 4 '\004'}, {handler = 0x555555bba793 <ZEND_ECHO_SPEC_TMPVAR_HANDLER>, op1 = {constant = 160, var = 160, num = 160,
      opline_num = 160, jmp_offset = 160}, op2 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, result = {constant = 0, var = 0,
      num = 0, opline_num = 0, jmp_offset = 0}, extended_value = 0, lineno = 7, opcode = 40 '(', op1_type = 4 '\004', op2_type = 8 '\b',
    result_type = 8 '\b'}, {handler = 0x555555b4f852 <ZEND_RETURN_SPEC_CONST_HANDLER>, op1 = {constant = 48, var = 48, num = 48, opline_num = 48,
      jmp_offset = 48}, op2 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, result = {constant = 0, var = 0, num = 0, opline_num = 0,
      jmp_offset = 0}, extended_value = 4294967295, lineno = 8, opcode = 62 '>', op1_type = 1 '\001', op2_type = 8 '\b', result_type = 8 '\b'}, {
    handler = 0xe0, op1 = {constant = 1443046120, var = 1443046120, num = 1443046120, opline_num = 1443046120, jmp_offset = 1443046120}, op2 = {
      constant = 21845, var = 21845, num = 21845, opline_num = 21845, jmp_offset = 21845}, result = {constant = 0, var = 0, num = 0, opline_num = 0,
      jmp_offset = 0}, extended_value = 0, lineno = 570, opcode = 0 '\000', op1_type = 0 '\000', op2_type = 0 '\000', result_type = 0 '\000'}, {
    handler = 0x7ffff4083300, op1 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, op2 = {constant = 0, var = 0, num = 0,
      opline_num = 0, jmp_offset = 0}, result = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, extended_value = 0, lineno = 0,
    opcode = 0 '\000', op1_type = 0 '\000', op2_type = 0 '\000', result_type = 0 '\000'}, {handler = 0x0, op1 = {constant = 0, var = 0, num = 0,
      opline_num = 0, jmp_offset = 0}, op2 = {constant = 0, var = 0, num = 0, opline_num = 0, jmp_offset = 0}, result = {constant = 0, var = 0, num = 0,
      opline_num = 0, jmp_offset = 0}, extended_value = 0, lineno = 0, opcode = 0 '\000', op1_type = 0 '\000', op2_type = 0 '\000', result_type = 0 '\000'}}

ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER
ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER //賦值
ZEND_ECHO_SPEC_TMPVAR_HANDLER //輸出臨時變數

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章