2009-11-24 16 views
7

मैंने function_include_path() फ़ंक्शन के बारे में सीखा। यह सब समय है, मैं config.php फाइलअपना खुद का BASE_PATH बनाम set_include_path परिभाषित करें?

define('BASE_PATH', '/var/www/mywebsite/public_html/'); 

में एक निरंतर परिभाषित और बाद के सभी php फ़ाइलों में, मैं इतना

include(BASE_PATH.'header.php'); 
include(BASE_PATH.'class/cls.data_access_object.php'); 

की तरह शामिल होंगे वहाँ लगातार दृष्टिकोण बनाम के साथ किसी भी लाभ है set_include_path दृष्टिकोण और इसके विपरीत? निरंतर दृष्टिकोण अप्रचलित है?

उत्तर

5

set_include_path() (या ini_set ('include_path', ...) का उपयोग करके) आपको कई फ़ोल्डर्स निर्दिष्ट करने की अनुमति देता है जिनमें आपका लाइब्रेरी कोड होगा। उदाहरण के लिए, यदि आपका आवेदन विभिन्न ढांचे/पुस्तकालयों पर निर्भर करता है, उदा। पीयर और ज़ेंड एफडब्लू, आपके पास कुछ ऐसा हो सकता है,

ini_set ('include_path', '/ usr/local/php/नाशपाती:/usr/local/php/zendfw');

उस दृष्टिकोण का नुकसान यह है कि यह जो भी फ़ाइल पहले पाता है उसका उपयोग करेगा; अगर आपके पास पथों में से एक से अधिक में "Mailer.php" नामक एक फ़ाइल है, तो इसमें पहली बार शामिल होगा, जिससे सूक्ष्म बग पैदा हो जाएंगे यदि यह आपका इरादा नहीं है। अच्छा कोड संगठन आम तौर पर उस मुद्दे को हल करता है। इसके अलावा, include_path realpath कैश (http://us2.php.net/realpath) के माध्यम से जाता है, जिसे कभी-कभी आपके सेटअप के आधार पर बेहतर प्रदर्शन प्राप्त करने के लिए tweaked की आवश्यकता होती है।

दोनों तरीके ठीक हैं, हालांकि परिभाषित() विधि का उपयोग करना अधिक स्पष्ट है।

FWIW, मैं आम तौर पर ini_set ('include_path', ...) का उपयोग करता हूं।

4

मुझे लगता है कि मिशेल की व्याख्या बहुत स्पष्ट है।

मैंने आपको "set_include_path" का उपयोग करने की सलाह दी है जब आप अपनी सभी PHP फ़ाइलों को किसी फ़ोल्डर में संग्रहीत करते हैं, उदाहरण के लिए: "libs /" (इसकी आसान)। परिभाषित() विधि का उपयोग करना तेज़ होना चाहिए क्योंकि आप फ़ाइल पथ को स्पष्ट रूप से निर्दिष्ट कर रहे हैं।

हमेशा पूर्ण पथों का उपयोग करने से बचने का प्रयास करें जब तक वे वास्तव में आवश्यक न हों। मैं अपने पथ इस तरह से निर्दिष्ट करने के लिए बहुत उपयोगी पाया:

define("BASE_PATH", dirname(__FILE__)); 

इस तरह आप पथ हर बार जब आप कोड के लिए कदम को अद्यतन करने के लिए नहीं आने देगा।

+0

बढ़िया! मैंने कुछ दिन पहले ही dirname() के बारे में सुना था – John

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