2011-03-31 20 views
9

En el siguiente código de la función de devolución de llamada se pasa a wrap_map no puede ver el argumento de la función externa, ¿por qué? (Vea el comentario del código para más detalles)php array_map devolución de llamada alcance parámetro

public static function wrap_implode($ar, $wrap, $delim){ 
    echo "wrap is $wrap"; //wrap is ok 
    $res = array_map(function($val){ 
    echo "wrap is $wrap"; //wrap is not set here! 
    return $wrap. $val . $wrap; 
    }, $ar); 

    return implode($delim, $res); 
} 

Respuesta

22

Porque está en otro ámbito. Si desea utilizar $wrap, Proveedores:

function($val) use ($wrap){ 
    //etc 
} 

Por supuesto, su función aquí no necesita una devolución de llamada:

return $wrap.implode($wrap.$delim.$wrap,$ar).$wrap; 
+0

fresco para el uso de la palabra clave (para una función), he aprendido algo:) – FMaz008

Cuestiones relacionadas