2010-07-18 34 views
5

Mã sau tải tất cả các tệp .php được tìm thấy trong thư mục được chỉ định (được xác định riêng). Có cách nào để đưa điều này vào một mảng để đơn giản hóa mã?Có cách nào để đưa PHP này vào một mảng và đơn giản hóa nó?

Chỉ có một vài biến thay đổi nhưng về cơ bản mã lặp lại nhiều lần.

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

Có một số phần khác gọi các thư mục khác nhau.

Bất kỳ trợ giúp nào được đánh giá cao.

Chúc mừng, James

Trả lời

4

Điều này khá đơn giản. Xem arraysforeach.

$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

Về lý thuyết, bạn có thể có tệp có tên 'something.php.jpg', do đó, sử dụng 'substr ($ file, -4)' có lẽ sẽ tốt hơn 'strpos (...)'. – phidah

+3

Tốt hơn để sử dụng 'pathinfo ($ file, PATHINFO_EXTENSION)' trong trường hợp đó. – Znarkus

5

Tôi muốn làm điều này sẽ sử dụng glob(). Và biến nó thành một chức năng.

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

Một ý tưởng tốt hơn có thể được tải lười biếng qua __autoload hoặc spl_autoload_register, bao gồm tất cả các file .php trong một thư mục có vẻ như là một ý tưởng tốt, nhưng không phải khi codebase của bạn càng lớn.

Mã của bạn nên được sắp xếp theo cách dễ dàng để hiểu về chế độ thừa kế, thay vì đặt tất cả chúng vào một thư mục để chúng có thể được bao gồm dễ dàng. Ngoài ra, nếu bạn không cần tất cả các mã trong các tập tin trong mọi yêu cầu bạn đang lãng phí tài nguyên.

Kiểm tra http://php.net/manual/en/language.oop5.autoload.php để có ví dụ dễ dàng.

+0

Tôi sẽ đề xuất tự động tải, nhưng áp phích có thể bao gồm phân đoạn mã thay vì các lớp. –

+0

Tất cả các tệp trong các thư mục được chỉ định là các hàm WordPress cần được tải. Họ có hành động để ra lệnh cho thứ tự mà họ nên gọi. –

+0

@James: Bạn nói đúng, có các phân đoạn mã thay vì các lớp học. –

0

này có thể được thực hiện khá chặt chẽ:

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

Đặt rằng trong một chức năng trong đó $ dirs do thỏa thuận như một param và sử dụng một cách tự do.

+0

Đánh đinh vào đầu, đây chính xác là những gì tôi đang tìm kiếm. Rất cám ơn. –

Các vấn đề liên quan