सबसे वेब डेवलपर्स इन दिनों, मैं अच्छी तरह से वेब एप्लिकेशन और साइटों का ठोस MVC वास्तुकला के लाभों का आनंद ले रहा हूँ की तरह। PHP के साथ एमवीसी करते समय, ऑटोलोडिंग स्पष्ट रूप से बेहद आसान में आता है।कुशल पीएचपी ऑटो लोड हो रहा है और नामकरण रणनीति
मैं, बस एक भी __autoload()
समारोह को परिभाषित करने से अधिक spl_autoload_register
के एक प्रशंसक बन गए के रूप में इस स्पष्ट रूप से अधिक लचीला है यदि आप अलग अलग आधार मॉड्यूल है कि प्रत्येक अपने स्वयं के autoloading का उपयोग को शामिल कर रहे हैं। हालांकि, मैंने जो लोडिंग फ़ंक्शन लिखा है, उसके बारे में मुझे कभी भी अच्छा लगा नहीं है। लोड करने के लिए संभावित वर्गों को देखने के लिए उनमें बहुत सारी स्ट्रिंग जांच और निर्देशिका स्कैनिंग शामिल है।
उदाहरण के लिए, मान लीजिए कि मैं एक ऐप्स एक आधार पथ PATH_APP
रूप में परिभाषित किया है, और models
, views
और controllers
नामित निर्देशिका के साथ एक सरल संरचना है करते हैं। मैं अक्सर एक नामकरण संरचना को नियोजित करता हूं जिससे फाइलों को उपयुक्त निर्देशिका के अंदर IndexView.php
और IndexController.php
नाम दिया जाता है, और मॉडल में आमतौर पर डिफ़ॉल्ट रूप से कोई विशेष योजना नहीं होती है। मैं इस तरह इस संरचना है कि spl_autoload_register
के साथ पंजीकृत हो जाता है के लिए एक लोडर समारोह हो सकता है:
public function MVCLoader($class)
{
if (file_exists(PATH_APP.'/models/'.$class.'.php')) {
require_once(PATH_APP.'/models/'.$class.'.php');
return true;
}
else if (strpos($class,'View') !== false) {
if (file_exists(PATH_APP.'/views/'.$class.'.php')) {
require_once(PATH_APP.'/views/'.$class.'.php');
return true;
}
}
else if (strpos($class,'Controller') !== false) {
if (file_exists(PATH_APP.'/controllers/'.$class.'.php')) {
require_once(PATH_APP.'/controllers/'.$class.'.php');
return true;
}
}
return false;
}
यह उस के बाद नहीं मिला है, मैं मॉडल निर्देशिका में उप-निर्देशिका स्कैन करने के लिए एक और समारोह हो सकता है। हालांकि, सभी if/else-ing, स्ट्रिंग जांच और निर्देशिका स्कैनिंग मेरे लिए अक्षम है, और मैं इसे बेहतर बनाना चाहता हूं।
मैं बहुत उत्सुक हूं कि फ़ाइल नामकरण और ऑटोलोडिंग रणनीतियों अन्य डेवलपर्स नियोजित कर सकते हैं। मैं विशेष रूप से कुशल ऑटोलोडिंग के लिए नियोजित करने के लिए अच्छी तकनीक के लिए देख रहा हूं, और ऑटोलोडिंग के विकल्प नहीं।
ठंडाता के लिए पिंप +1 – Louis
मुझे निश्चित रूप से अंडरस्कोर दृष्टिकोण पसंद है। यह कक्षा-से-फ़ाइल अनुवाद को और अधिक कुशल बनाता है। – zombat
अपनी '$ files' सरणी के आस-पास 'array_unique()' लपेटें। यदि कक्षा के नाम में कोई अंडरस्कोर नहीं है, तो आप प्रत्येक फ़ाइल को दो बार कोशिश कर रहे हैं। – mpen