2011-11-20 12 views
30

क्या है/एकाधिक जाने का लाभ (रों) कर रहे हैं spl_autoload_registerकई spl_autoload_register

उदाहरण:

spl_autoload_register('autoload_systems'); 
spl_autoload_register('autoload_thirdparties'); 
spl_autoload_register('autoload_services'); 

बनाम:

एक

spl_autoload_register('autoload'); या __autoload();

का उपयोग कर और फिर तर्क मैं करूँगा समारोह के नजदीक।

eg: 
$ftp = new systems_ftp(); 
$services = new services_cron_email(); 

उत्तर

21

आप एक __autoload() है और आप जो भी एक था एक तीसरी पार्टी पुस्तकालय शामिल है, यह clobbered किया जाएगा।

spl_autoload_register() के साथ एकाधिक ऑटोलोडों को पंजीकृत करना सुनिश्चित करता है कि आप मौजूदा कोड/भविष्य के ऑटोलोड के बिना कोड को मौजूदा कोड (सोच पुस्तकालय, आदि) के साथ छोड़ सकते हैं।

इसके अलावा, PHP manual states ...

spl_autoload_register() autoloading वर्गों के लिए एक और अधिक लचीला विकल्प प्रदान करता है। इस कारण से, __autoload() का उपयोग निराश है और भविष्य में बहिष्कृत या हटाया जा सकता है।

+0

लेकिन कई spl_autoload_register होने धीमी सिर्फ एक का उपयोग कर तो है किया b करने के लिए तो क्या होगा? –

+2

@GinoSullivan शायद, लेकिन मैं शायद उस कोड को लिखने के बहाने के रूप में उपयोग नहीं करता जो '__autoload()' का उपयोग करता है। – alex

+0

जानकारी के लिए धन्यवाद –

-1

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

वर्ग MyAutoLoader {

public function __construct() 
{ 
    spl_autoload_register(array($this, 'load')); 
} 




function load($class) 
{ 

    $filepath = 'classes/'.$class.'.php'; 
    require_once($filepath); 

} 

}

तो autoloader वर्ग के रूप में इस सरल वर्ग पर विचार इस लोडर फ़ाइल को शामिल और इस वर्ग के उदाहरण बनाने

$autoload = new MyAutoLoader(); 

अब आप सीधे इंस बना सकते हैं कक्षाओं के tances लगता हम निर्देशिका में 'व्यक्ति' वर्ग है 'वर्गों \ सबंधी \ सेवा \ Person.php' और एक ही रास्ता है कि वर्ग के नाम का स्थान

$ व्यक्ति = नए सबंधी \ सेवा \ व्यक्ति() ;

अब जब आप नए का उपयोग करेंगे तो यह जांच करेगा कि यह वर्ग मौजूद है या स्ट्रिंग के रूप में मूल्य वर्ग 'MyAutoLoader' वर्ग के 'लोड' फ़ंक्शन को पास किया जाएगा। और वहां यह शामिल हो जाएगा। या यू समारोह 'लोड' उर वर्ग फ़ाइलों के रास्ते को ठीक करने के लिए रखा बदल सकते हैं उर स्थिति या जो कुछ भी जरूरत रास्तों को ठीक करने ..