2011-07-09 14 views
7

Buduję aplikację PHP, która używa menu wyboru do tworzenia szablonów wiadomości e-mail. Szablony są podzielone na części wielokrotnego użytku (każdy jest osobnym plikiem html). Czy istnieje prosty sposób na żądanie wielu plików z jednym wyrażeniem? (Moje PHP jest bardzo zardzewiały ...)Wymagaj wielu plików

Zasadniczo chcę zrobić coś takiego:

function require_multi() { 
    require_once($File1); 
    require_once($File2); 
    require_once($File3); 
    require_once($File4); 
} 

Odpowiedz

13

Cóż, można przekształcić go w funkcję:

function require_multi($files) { 
    $files = func_get_args(); 
    foreach($files as $file) 
     require_once($file); 
} 

Korzystanie tak:

require_multi("one.php", "two.php", ..); 

Jednakże, jeśli jesteś w tym zajęcia, lepszym rozwiązaniem byłoby wykorzystanie autoloading.

5

zgłosił Tom Haigh z how to require all files in a folder?:

$files = glob($dir . '/*.php'); 
foreach ($files as $file) 
    require($file); 

przechowywać wszystkie wymagane pliki w $dir i powyższy kod zrobi resztę.

+1

Wygląda na bardzo zły pomysł, wymagający plików na ślepo ... – ehime

+0

Może być bardzo przydatny do debugowania. Znajduję się teraz w sytuacji, w której muszę załadować wszystkie pliki css, które znajdują się w './Css', więc to się dzieje. (do debugowania, nie do produkcji) –

1

EDIT:

Ponieważ chcesz wymagać lub zawierać wiele plików, można użyć tego rekurencyjny algorytm zawierać pliki w określonym folderze. Folder jest katalogiem głównym, który uruchamia iterator w wersji . Ponieważ algorytm jest rekurencyjny, automatycznie przejdzie wszystkie kolejne foldery i uwzględni te pliki.

public function include_all_files($root) { 
    $d = new RecursiveDirectoryIterator($root); 
    foreach (new RecursiveIteratorIterator($d) as $file => $f) { 
     $ext = pathinfo($f, PATHINFO_EXTENSION); 
     if ($ext == 'php' || $ext == 'inc') 
      include_once ($file); // or require(), require_once(), include_once() 
    } 
} 

include_all_files('./lib'); 
+0

To rozwiązanie jest dobre tylko wtedy, gdy chce załadować klasy. Tak więc te funkcje narzędziowe, których ponownie używa, nie mogą znajdować się w klasach. Więc to nie jest dobra odpowiedź. Myślę, że to problem. Jest to jednak ciekawa metoda automatycznego ładowania klas. –