Si ambos isset()
y empty()
generan exactamente el mismo código de operación ISSET_ISEMPTY_DIM_OBJ
, ¿cómo puede la VM de PHP decir la diferencia entre los dos?¿Por qué isset() y empty() usan el mismo opcode?
este código:
empty($a['b']);
isset($a['b']);
produce los siguientes códigos de operación:
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
Otra prueba:
if (empty($a['b'])) {
echo 'abc';
}
if (isset($a['b'])) {
echo 'abc';
}
Esto produce:
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)
¿Cómo es que llegó a este nivel lol – dynamic
Esto podría ser el resultado de alguna optimización. No estás usando el valor de retorno. Intenta algo más complejo como un 'if (...)'. – Gumbo
@Gumbo, pregunta actualizada. – rid