如果isset()和empty()都生成完全相同的ISSET_ISEMPTY_DIM_OBJ操作码,那么
PHP虚拟机如何分辨两者之间的区别呢?
原文链接:https://www.f2er.com/php/133026.html这段代码:
empty($a['b']); isset($a['b']);
生成以下操作码:
ISSET_ISEMPTY_DIM_OBJ $a,b -> TMP_VAR 0 FREE TMP_VAR 0 ISSET_ISEMPTY_DIM_OBJ $a,b -> TMP_VAR 1 FREE TMP_VAR 1
另一个测试:
if (empty($a['b'])) { echo 'abc'; } if (isset($a['b'])) { echo 'abc'; }
这产生:
ISSET_ISEMPTY_DIM_OBJ $a,b -> TMP_VAR 0 JMPZ TMP_VAR 0,&(BC4E00+4) ECHO abc JMP &(BC4E00+4) ISSET_ISEMPTY_DIM_OBJ $a,b -> TMP_VAR 1 JMPZ TMP_VAR 1,&(BC4FE0+8) ECHO abc JMP &(BC4FE0+8)