La función en PHP no devuelve el valor de mi Array, ¿por qué?

Tengo un pequeño fragmento de código y no puedo hacerlo funcionar.

$dict = array('401003' => "Test")
function getID ($tempid) {
    $id = '<span title="'.$tempid.'">'.$dict[$tempid].'</span>';
    return $id;
}
echo getID('401003');
echo $dict['401003'];

Esperaba obtener la 'Prueba' dos veces, pero solo el segundo eco me devolvió la 'Prueba'. Algo parece estar mal con $dict[$tempid] en la función

¿Pueden ayudarme por favor?

preguntado el 22 de mayo de 12 a las 14:05

2 Respuestas

Esto tiene que ver con el Alcance variable, no tienes acceso a la $dict variable dentro de su función. Puede evitar esto declarando $dict como global, o pasándolo a su función, podría refactorizarlo así:

function getID($tempId, $dict) {
    return '<span title="'.$tempid.'">'.$dict[$tempid].'</span>';
}

contestado el 22 de mayo de 12 a las 14:05

ok, no sabía eso, soy nuevo en php, vengo de java y javascript... pero lo entiendo, ¡gracias! - Andreas Daoutis

getID no ve su matriz, debe agregarla como parámetro o hacer que $dict sea global, lo que generalmente es una mala idea:

$dict = array('401003' => "Test")
function getID ($tempid) {
    global $dict;
    $id = '<span title="'.$tempid.'">'.$dict[$tempid].'</span>';
    return $id;
}

contestado el 22 de mayo de 12 a las 14:05

¿Puedes explicar por qué hacerlo global sería una mala idea? - Andreas Daoutis

Si tiene demasiadas variables globales, puede perder la noción de lo que se usa y dónde, y luego obtener dos referencias de variables con el mismo nombre (referencia) sin saberlo. Esto conducirá a un comportamiento inesperado en el que una parte del código lo actualiza sin darse cuenta de que otra parte también lo está usando. - Brad

ok eso es un buen punto, pero creo que no es un problema real. especialmente no para mí, porque es un archivo php muy pequeño, pero gracias por tu respuesta. - Andreas Daoutis

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.