如果isset()
和empty()
都生成完全相同的ISSET_ISEMPTY_DIM_OBJ
操作碼,那麼PHP虛擬機如何分辨兩者之間的區別?isset()和empty()如何使用相同的操作碼?
此代碼:
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)
你怎麼會得到這個級別大聲笑 – dynamic 2011-06-04 15:51:42
這可能是一些優化的結果。你沒有使用返回值。嘗試更復雜的東西,比如「if(...)」。 – Gumbo 2011-06-04 15:55:19
@Gumbo,更新了問題。 – rid 2011-06-04 16:26:33