2010-07-18 22 views
5

El siguiente código carga todos los archivos .php encontrados en la carpeta especificada (definidos por separado). ¿Hay alguna manera de poner esto en una matriz para simplificar el código?¿Hay alguna manera de poner este PHP en una matriz y simplificarlo?

Solo cambian un par de variables, pero esencialmente el código se repite varias veces.

// The General Files 

$the_general = opendir(FRAMEWORK_GENERAL); 

while (($the_general_files = readdir($the_general)) !== false) { 
    if(strpos($the_general_files,'.php')) { 
     include_once(FRAMEWORK_GENERAL . $the_general_files);  
    }  
} 

closedir($the_general); 


// The Plugin Files 

$the_plugins = opendir(FRAMEWORK_PLUGINS); 

while (($the_plugins_files = readdir($the_plugins)) !== false) { 
    if(strpos($the_plugins_files,'.php')) { 
     include_once(FRAMEWORK_PLUGINS . $the_plugins_files);  
    }  
} 

closedir($the_plugins); 

Hay varias secciones más que llaman carpetas diferentes.

Cualquier ayuda es muy apreciada.

Cheers, James

Respuesta

4

Esto es bastante simple. Ver arrays y foreach.

$dirs = array(FRAMEWORK_GENERAL, FRAMEWORK_PLUGINS,); 

foreach ($dirs as $dir) { 
    $d = opendir($dir); 

    while (($file = readdir($d)) !== false) { 
     if(strpos($file,'.php')) { 
      include_once($dir . $file);  
     }  
    } 

    closedir($d); 
} 
+0

En teoría, podría tener un archivo llamado 'something.php.jpg', por lo que usar 'substr ($ file, -4)' probablemente sería mejor que 'strpos (...)'. – phidah

+3

Es mejor usar 'pathinfo ($ file, PATHINFO_EXTENSION)' en ese caso. – Znarkus

5

Yo manera más agradable de hacer esto sería utilizar glob(). Y convertirlo en una función.

function includeAllInDirectory($directory) 
{ 
    if (!is_dir($directory)) { 
     return false; 
    } 

    // Make sure to add a trailing slash 
    $directory = rtrim($directory, '/\\') . '/'; 

    foreach (glob("{$directory}*.php") as $filename) { 
     require_once($directory . $filename); 
    } 

    return true; 
} 
1

Una mejor idea podría ser la carga diferida a través de __autoload o spl_autoload_register, incluyendo todos los archivos php en un directorio podrían parecer como una buena idea, pero no cuando su base de código se hace más grande.

Su código debe distribuirse en una jerarquía fácil de entender, en lugar de ponerlos todos en un directorio para que puedan incluirse fácilmente. Además, si no necesita todo el código en los archivos en cada solicitud, está desperdiciando recursos.

Compruebe http://php.net/manual/en/language.oop5.autoload.php para un ejemplo fácil.

+0

Iba a sugerir autocarga, pero el póster podría incluir segmentos de código en lugar de clases. –

+0

Todos los archivos en las carpetas especificadas son funciones de WordPress que deben cargarse. Tienen acciones para dictar el orden en el que deben ser llamados. –

+0

@James: tienes razón, hay segmentos de código en lugar de clases. –

0

Esto se puede hacer muy bien:

$dirs = array(FRAMEWORK_GENERAL, FRAMEWORK_PLUGINS); 
foreach($dirs as $dir) { 
    if (!is_dir($dir)) { continue; } 
    foreach (glob("$dir/*.php") as $filename) { 
     include($filename); 
    } 
} 

poner eso en una función que viene en directorios $ como un parámetro y utilizar libremente.

+0

Golpee el clavo en la cabeza, esto es exactamente lo que estaba buscando. Muchas gracias. –

Cuestiones relacionadas