2012-11-29 18 views
5

मुझे PHP में निर्भर वर्गों को लोड करने के बारे में सही तरीके/सर्वोत्तम अभ्यास के बारे में संदेह है।PHP में निर्भरता लोड करने का सही तरीका क्या है?

मैं आम तौर पर जावा आयात के समान include_once के साथ प्रत्येक कक्षा की शुरुआत में सभी निर्भरताओं को डालता हूं। कुछ ऐसा:

include_once 'dto/SomeObjectDTO.php;' 
include_once 'dao/SomeObjectDAO.php;' 
include_once 'util/SomeObjectUtil.php;' 

class SomeObjectService{ 
    #class code here 
} 

कक्षाओं को लोड करने का यह सबसे अच्छा तरीका है? या शायद Bootstrap.php में सभी वर्गों को लोड करें? दूसरा तरीका?

ध्यान दें कि मैं अपनी खुद की कक्षाओं को लोड करने के बारे में बात कर रहा हूं, न कि जटिल बाहरी वर्गों जैसे ढांचे।

+4

एक ऑटोलोडर का उपयोग करना आम तौर पर आजकल सर्वोत्तम अभ्यास माना जाता है –

+0

PHP बहुत तेज़ है ... आप इस विधि का भी उपयोग कर सकते हैं .... –

उत्तर

2

तरह Homer6 कहा, autoloading एक php की निर्भरता लोड हो रहा है तंत्र में बनाया गया है।

PHP-FIG ने पीएसआर नामक PHP कोडिंग मानकों के एक परिवार का प्रस्ताव दिया। पीएसआर -0 कक्षा नामकरण और ऑटोलोडिंग के साथ संबंधित है। ये कुछ लिंक कर रहे हैं:

इसके अलावा, यह ध्यान रखें, कि autoloading एक मूल्य के साथ आता है। प्रस्तावित डिफ़ॉल्ट ऑटोलोडर में एफएस के साथ बहुत सी स्ट्रिंग काम और काम है (आप अपने स्वयं के तेज़ ऑटोलोडर को कार्यान्वित कर सकते हैं, लेकिन यह मानक के अनुरूप नहीं है)। जब आपको बहुत सारी कक्षाएं लोड करने की आवश्यकता होती है तो यह धीमी गति से धीमा हो जाता है। इसलिए यदि आपको केवल 2 कक्षाएं लोड करने की आवश्यकता है, तो आपका दृष्टिकोण तेज़ और अधिक समझदार होगा।

2

PHP आप अपनी ऑटोलोड विधि पंजीकृत कर सकते हैं। सिम्फनी 2 में ऐसा करने के लिए एक अच्छी कक्षा है।

http://php.net/manual/en/function.spl-autoload-register.php

मैं पुस्तकालय है कि हम लिखा है के साथ काम करने के लिए इसे अनुकूलित है।

https://github.com/homer6/altumo/blob/master/source/php/loader.php

https://github.com/homer6/altumo/blob/master/source/php/Utils/UniversalClassLoader.php

यह रूपांतरण आप नामस्थान कि शीर्ष स्तर नाम स्थान की आवश्यकता नहीं है एक ही फ़ोल्डर नाम करने के लिए अनुमति देता है।

1
set_include_path(get_include_path() 
     . PATH_SEPARATOR . 'path1' 
     . PATH_SEPARATOR . 'path2' 
); 

// auto load classes: 
function autoloadClasses($className) { 
require_once $className . '.php'; 
} 

spl_autoload_register('autoloadClasses'); 
2

संस्करण 5.3 PHP नामस्थानों का समर्थन करता है। यह आपको एक पैकेज और क्लास पदानुक्रम की अनुमति देता है जैसे कि आप उन्हें सी ++ या जावा से जानते हैं। अधिक जानने के लिए

उन संसाधनों चेक आउट:

http://www.php.net/manual/en/language.namespaces.basics.php

http://php.net/manual/en/language.namespaces.importing.php

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