2011-09-11 12 views
6

Por favor, vea la siguiente función para escanear los archivos en un directorio (Tomado de here)Ayuda con la función de PHP array_filter

function scandir_only_files($dir) { 
    return array_filter(scandir($dir), function ($item) { 
     return is_file($dir.DIRECTORY_SEPARATOR.$item); 
    }); 
} 

Esto no funciona debido a que el $ dir no está en el ámbito de la función anónima, y aparece vacío, lo que hace que el filtro devuelva FALSE todo el tiempo. ¿Cómo reescribiría esto?

Respuesta

15

Usted tiene que declarar explícitamente las variables heredadas del ámbito padre, con la palabra clave use:

// use the `$dir` variable from the parent scope 
function ($item) use ($dir) { 

function scandir_only_files($dir) { 
    return array_filter(scandir($dir), function ($item) use ($dir) { 
     return is_file($dir.DIRECTORY_SEPARATOR.$item); 
    }); 
} 

Ver this example de las funciones anónimas página.

Los cierres pueden heredar variables del ámbito primario. Cualquiera de estas variables debe declararse en el encabezado de la función. El alcance principal de un cierre es la función en la que se declaró el cierre (no necesariamente la función desde la que se llamó).

+0

+1 para el uso 'use' – tttony

+0

@ arnaud- awesome- acaba de aprender algo nuevo! – Yarin

Cuestiones relacionadas