Если оба isset()
и empty()
генерируют точный код операции ISSET_ISEMPTY_DIM_OBJ
, как PHP-VM может определить разницу между двумя?
Этот код:
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)