2010-07-18 13 views
5

निम्न कोड निर्दिष्ट फ़ोल्डर (अलग से परिभाषित) में मिली सभी .php फ़ाइलों को लोड करता है। कोड को सरल बनाने के लिए इसे सरणी में रखने का कोई तरीका है?क्या इस PHP को सरणी में डालने और इसे सरल बनाने का कोई तरीका है?

केवल कुछ चर बदलते हैं लेकिन अनिवार्य रूप से कोड कई बार दोहराता है।

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

कई और अनुभाग हैं जो विभिन्न फ़ोल्डरों को कॉल करते हैं।

किसी भी मदद की बहुत सराहना की जाती है।

चीयर्स, जेम्स

उत्तर

4

यह काफी सरल है। arrays और 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

सिद्धांत में आपके पास 'something.php.jpg' नाम की एक फ़ाइल हो सकती है, इसलिए 'substr ($ file, -4) 'का उपयोग करके' स्ट्रॉप्स (...) 'से बेहतर होगा। – phidah

+3

उस मामले में 'pathinfo ($ फ़ाइल, PATHINFO_EXTENSION) 'का उपयोग करने के लिए बेहतर है। – Znarkus

5

मैं अच्छे तरीका यह glob() उपयोग करने के लिए होगा क्या करना है। और इसे एक समारोह में बनाओ।

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

एक बेहतर विचार __autoload या spl_autoload_register के माध्यम से आलसी लोड हो रहा है, एक निर्देशिका में सभी .php फ़ाइलों में एक अच्छा विचार की तरह अब लग सकता है सहित हो सकता है, लेकिन नहीं है जब आपके codebase बड़ा हो जाता है।

आपका कोड उन्हें एक निर्देशिका में डालने की बजाय, विरासत को समझने में आसान होना चाहिए ताकि उन्हें आसानी से शामिल किया जा सके। साथ ही, यदि आपको संसाधनों को बर्बाद कर रहे प्रत्येक अनुरोध में फ़ाइलों में सभी कोड की आवश्यकता नहीं है।

एक आसान उदाहरण के लिए http://php.net/manual/en/language.oop5.autoload.php देखें।

+0

मैं ऑटोलोड का सुझाव देने जा रहा था, लेकिन पोस्टर कक्षाओं के बजाय कोड सेगमेंट शामिल हो सकता है। –

+0

निर्दिष्ट फ़ोल्डर्स में सभी फ़ाइलें वर्डप्रेस फ़ंक्शंस हैं जिन्हें लोड करने की आवश्यकता है। उनके पास आदेश को निर्देशित करने के लिए कार्य हैं जिसमें उन्हें बुलाया जाना चाहिए। –

+0

@ जेम्स: आप सही हैं, कक्षाओं के बजाय कोड सेगमेंट हैं। –

0

यह सुंदर कसकर किया जा सकता है:

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

कि एक समारोह जहां $ dirs का कोई पैरामीटर के रूप में में आता है और स्वतंत्र रूप से उपयोग करने में रख दें।

+0

सिर पर नाखून मारा, यह वही है जो मैं खोज रहा था। बहुत धन्यवाद। –

संबंधित मुद्दे

 संबंधित मुद्दे