2010-07-18 7 views
5

Der folgende Code lädt alle .php-Dateien im angegebenen Ordner (separat definiert). Gibt es eine Möglichkeit, dies in ein Array zu setzen, um den Code zu vereinfachen?Gibt es eine Möglichkeit, dieses PHP in ein Array zu bringen und es zu vereinfachen?

Nur ein paar Variablen ändern sich, aber im Wesentlichen wiederholt sich der Code mehrmals.

// 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); 

Es gibt mehrere weitere Abschnitte, die verschiedene Ordner aufrufen.

Jede Hilfe wird sehr geschätzt.

Cheers, James

Antwort

4

Das ist ziemlich einfach. Siehe arrays und 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

Theoretisch könnte man eine Datei namens 'something.php.jpg' haben, also wäre 'substr ($ file, -4)' wahrscheinlich besser als 'strpos (...)'. – phidah

+3

In diesem Fall ist 'pathinfo ($ file, PATHINFO_EXTENSION)' besser zu verwenden. – Znarkus

5

ich schönere Art und Weise würde dies zu tun glob() zu verwenden. Und mach es zu einer Funktion.

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

Eine bessere Idee könnte ein träges Laden über __autoload oder spl_autoload_register sein, einschließlich aller .php Dateien in einem Verzeichnis könnte jetzt wie eine gute Idee erscheinen, aber nicht, wenn die Code-Basis wird größer.

Ihr Code sollte in einer leicht verständlichen Hierarchie angeordnet sein, anstatt sie alle in einem Verzeichnis zu speichern, damit sie leicht eingebunden werden können. Wenn Sie nicht den gesamten Code in den Dateien in jeder Anfrage benötigen, verschwenden Sie Ressourcen.

Überprüfen Sie http://php.net/manual/en/language.oop5.autoload.php für ein einfaches Beispiel.

+0

Ich würde Autoload vorschlagen, aber das Poster könnte Codesegmente anstelle von Klassen enthalten. –

+0

Alle Dateien in den angegebenen Ordnern sind WordPress-Funktionen, die geladen werden müssen. Sie haben Aktionen, um die Reihenfolge zu bestimmen, in der sie aufgerufen werden sollen. –

+0

@James: Du hast recht, es gibt Codesegmente statt Klassen. –

0

Dies kann ziemlich dicht gemacht werden:

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

Setzen Sie, dass in einer Funktion, bei $ dirs in als param kommt und frei verwenden.

+0

Hit den Nagel auf den Kopf, das ist genau das, was ich gesucht habe. Vielen Dank. –

Verwandte Themen