2012-09-16 13 views
8

क्या php class Autoloader एक फ़ाइल खोलता है और कक्षा के नाम के लिए जांच करता है? मैं देख रहा हूं कि यह वास्तव में कैसे लागू किया जाता है। एक बात मुझे पता है कि यह रिकर्सिव है? अगर मैं गलत हूँ तो कृपया मुझे पता हैphp autoloader कैसे काम करता है

उल्लेख overhere के रूप में करते हैं: autoloader brief over view कैसे पीएचपी Autoloader काम करता है

पीएचपी Autoloader वर्ग, विशेषता और इंटरफ़ेस परिभाषा के लिए परिभाषित निर्देशिका में रिकर्सिवली खोज करता है। बिना किसी कॉन्फ़िगरेशन निर्देशिका जिसमें आवश्यक फ़ाइल रहता है डिफ़ॉल्ट वर्ग पथ के रूप में उपयोग किया जाएगा।

फ़ाइल नामों को किसी भी सम्मेलन का पालन करने की आवश्यकता नहीं है। कक्षा परिभाषाओं के लिए सभी फ़ाइलों को खोजा गया है। फ़ाइलें जो वर्ग नाम या के समान हैं .php या .inc के साथ समाप्त होती हैं। यदि समर्थित है, तो PHP Tokenizer विश्वसनीय क्लास परिभाषा खोज के लिए उपयोग किया जाएगा।

+1

ऐसा लगता है कि आपके प्रश्न में लिंक –

+0

जानने के लिए पर्याप्त है "क्या php class Autoloader एक फ़ाइल खोलता है और कक्षा के नाम के लिए जांच करता है?" - यह फाइल में सभी कक्षाओं की खोज करता है। – zerkms

+0

लेकिन मुझे यह पता चल सकता है कि यह कैसे कार्यान्वित किया गया है, ऑटोलोडर की पूरी प्रक्रिया को खरोंच से, यह मेरे लिए दिलचस्प है कि यह कैसे लिखा गया है कि इसका पहला लिखा – meWantToLearn

उत्तर

14

पीएचपी autoloader करने के लिए सिर्फ एक तंत्र है एक फ़ाइल जब एक वर्ग निर्माण किया है शामिल हैं।

यदि आप अपनी सभी कक्षाएं 1 फ़ाइल में डालते हैं, तो आपको ऑटोलोडर की आवश्यकता नहीं होती है। बेशक, जब प्रोग्रामिंग OO आप हर वर्ग को उसकी अपनी फ़ाइल, और thats दे जहां autoloader में आता है

कुछ उदाहरण:।

class AutoLoader 
{ 
    public function __construct() 
    { 
    spl_autoload_register(array($this, 'ClassLoader')); 
    } 

    public function ClassLoader($class) 
    {  
    if(class_exists($class, false)) 
     return true; 

    if(is_readable('path_to_my_classes/' . $class . '.php')) 
      include_once 'path_to_my_classes/' . $class . '.php' 
    } 
} 

$autoloader = new AutoLoader(); 

यहाँ क्या होता है यह है कि जब autoloader वर्ग बनाया जाता है, वर्ग विधि क्लासलोडर एक ऑटोलोडर के रूप में पंजीकृत है।

जब कोई नई कक्षा बनाई जाती है, तो क्लासलोडर विधि पहले जांचती है कि कक्षा के लिए फ़ाइल पहले ही लोड हो चुकी है। यदि नहीं, तो कक्षा को पथ के साथ तैयार किया जाता है और विस्तार के साथ बढ़ाया जाता है। अगर फ़ाइल पठनीय है तो इसे शामिल किया गया है।

बेशक, आप इसे बहुत परिष्कृत बना सकते हैं। चलिए नामस्थान और मैपर के साथ एक उदाहरण देखें। मान लें हम autoloader वर्ग में हैं:

private $mapper array('Foo' => 'path_to_foo_files/', 'Bar' => 'path_to_bar_files/'); 

    public function ClassLoader($class) 
    {  
    if(class_exists($class, false)) 
     return true; 

    // break into single namespace and class name 
    $classparts = explode('\\', $class); 
    $path = $this->mapper[$classparts[0]]; 

    if(is_readable($path . $classparts[1] . '.php')) 
      include_once $path . $classparts[1] . '.php' 
    } 

यहाँ, classname एक namespace हिस्सा है और एक classname भागों में splittet है। नामस्थान भाग को मैपर सरणी में देखा जाता है, और उस पथ को तब PHP फ़ाइल के लिए पथ शामिल करने के रूप में उपयोग किया जाता है।

ये केवल उदाहरण हैं कि एक ऑटोलोडर के साथ क्या किया जा सकता है। उत्पादन के लिए कुछ और काम करने की जरूरत है, उदाहरण के लिए त्रुटि जांच।

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