दिलचस्प पोस्ट
रिएक्ट.जेएस में पैरेंट कॉम्पोनेंट के पास प्रॉप्स पास करें एक ORM क्या है और मैं इसके बारे में अधिक जानकारी कैसे पा सकता हूं? jQuery ड्रॉपडाउन से चयनित विकल्प प्राप्त करें जावास्क्रिप्ट ऑब्जेक्ट में गतिशील रूप से नामित गुण जोड़ना संभव है? मास्टर शाखा और 'मूल / मास्टर' अलग हो गए हैं, कैसे 'शाखाओं' को अपवर्जित करना है? समझना __get__ और __set__ और पायथन डिस्क्रिप्टर आईओएस 5 के साथ पीछे की तरफ से संगत रहते हुए आईओएस 6 में ऑटो लेआउट को सक्षम करना फायरबेज क्वेरी डबल नेस्टेड पायथन उपयोगकर्ता से एक अक्षर पढ़ता है HTML तत्वों पर खींचें और ड्रॉप अक्षम करें? मैं एंड्रॉइड डिवाइस के माउंटेड बाह्य संग्रहण की सूची कैसे प्राप्त करूं? जावास्क्रिप्ट में स्ट्रिंग में स्ट्रिंग को कैसे परिवर्तित करें? हाइबरनेट ओपन सत्र में क्यों एक बुरा अभ्यास माना जाता है? JSON.parse अनपेक्षित वर्ण त्रुटि डेटाग्रिड दृश्य मूल पाठ बॉक्स में कॉपी करें

कार्यों में PHP वैश्विक

वैश्विक खोजशब्द की उपयोगिता क्या है?

क्या कोई अन्य तरीका एक विधि को पसंद करने के लिए कोई कारण है?

  • सुरक्षा?
  • प्रदर्शन?
  • और कुछ?

विधि 1:

function exempleConcat($str1, $str2) { return $str1.$str2; } 

विधि 2:

 function exempleConcat() { global $str1, $str2; return $str1.$str2; } 

यह global रूप से उपयोग करने के लिए समझदारी कहां है?

मेरे लिए, यह खतरनाक प्रतीत होता है … लेकिन यह ज्ञान की कमी हो सकती है। मुझे दस्तावेज में दिलचस्पी है (उदाहरण के लिए कोड का उदाहरण, दस्तावेज़ीकरण लिंक …) तकनीकी कारण

अग्रिम में धन्यवाद!


इनाम

यह विषय के बारे में एक अच्छा सामान्य प्रश्न है, मैं (@ गॉर्डन) अतिरिक्त उत्तर पाने के लिए एक उपहार की पेशकश कर रहा हूं। चाहे आपका जवाब मेरे साथ समझौता हो या अलग-अलग दृष्टिकोण को देखते हुए कोई फर्क नहीं पड़ता चूंकि global विषय हर अब और उसके बाद आता है, इसलिए हम लिंक करने के लिए एक अच्छा "विहित" जवाब का उपयोग कर सकते हैं।

वेब के समाधान से एकत्रित समाधान "कार्यों में PHP वैश्विक"

ग्लोबल बुराई हैं

यह global खोजशब्द के लिए भी सच है, साथ ही साथ स्थानीय क्षेत्र से लेकर वैश्विक क्षेत्र तक पहुंचने वाली सभी चीजें (स्थिति, एकल, रजिस्ट्रियां, स्थिर)। आप उनका उपयोग नहीं करना चाहते। एक फ़ंक्शन कॉल के बाहर कुछ भी पर भरोसा नहीं करना चाहिए, उदा

 function fn() { global $foo; // never ever use that $a = SOME_CONSTANT // do not use that $b = Foo::SOME_CONSTANT; // do not use that unless self:: $c = $GLOBALS['foo']; // incl. any other superglobal ($_GET, …) $d = Foo::bar(); // any static call, incl. Singletons and Registries } 

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

सुपरगलॉबल्स का उपयोग करना एक स्पष्ट दोष नहीं है, लेकिन अगर आप अपने कोड को कमांड लाइन से कहते हैं, तो आपके पास $_GET या $_POST नहीं है यदि आपका कोड इनमें से इनपुट पर निर्भर करता है, तो आप अपने आप को एक वेब वातावरण में सीमित कर रहे हैं। बस किसी ऑब्जेक्ट में अनुरोध को संक्षेप करें और इसके बजाय इसका उपयोग करें।

हार्डकोड क्लासनामों (स्थिर, स्थिर) युग्मन के मामले में, आपका फ़ंक्शन भी उस वर्ग के बिना उपलब्ध नहीं हो सकता है। जब एक ही नेमस्पेस से कक्षाएं होती हैं, लेकिन जब आप विभिन्न नामों से मिश्रण शुरू करते हैं, तो आप एक गड़बड़ गंदगी बना रहे हैं।

उपरोक्त सभी के द्वारा फिर से उपयोग को बाधित किया जा सकता है तो इकाई परीक्षण है

इसके अलावा, जब आप वैश्विक दायरे के लिए जोड़े हैं, तो आपके फ़ंक्शन के हस्ताक्षर झूठ हैं

 function fn() 

एक झूठा है, क्योंकि यह दावा करता है कि मैं उस समारोह को कुछ भी पास किए बिना फोन कर सकता हूं। यह केवल तब होता है जब मैं फ़ंक्शन बॉडी को देखता हूं जिसे मैं सीखता हूं कि मुझे एक निश्चित स्थिति में पर्यावरण सेट करना होगा।

यदि आपके फ़ंक्शन को चलाने के लिए तर्क आवश्यक हैं, तो उन्हें स्पष्ट करें और इन्हें पास करें:

 function fn($arg1, $arg2) { // do sth with $arguments } 

स्पष्ट रूप से हस्ताक्षर से बताता है कि उसे क्या कहा जाना चाहिए। यह किसी विशिष्ट राज्य में रहने के लिए पर्यावरण पर निर्भर नहीं है। आपको करने की ज़रूरत नहीं है

 $arg1 = 'foo'; $arg2 = 'bar'; fn(); 

यह (वैश्विक कीवर्ड) में खींचने का मामला है (तर्क में) धक्का दे रहा है जब आप निर्भरताएं डालते हैं, तो फ़ंक्शन अब बाहर पर भरोसा नहीं करता। जब आप fn(1) करते हैं, तो आपके पास 1 के बाहर कहीं एक व्हेरिएबल रखने की ज़रूरत नहीं है। लेकिन जब आप फ़ंक्शन के भीतर वैश्विक $one में खींचते हैं, तो आप युगल को विश्वव्यापी गुंजाइश के रूप में देखते हैं और उम्मीद करते हैं कि इसमें कहीं भी परिभाषित किए जाने वाले का एक चर होगा। फ़ंक्शन अब स्वतंत्र नहीं है

इससे भी बदतर, जब आप अपने फ़ंक्शन के अंदर ग्लोबल्स बदल रहे हों, तो आपका कोड पूरी तरह से समझ से बाहर नहीं हो सकता, क्योंकि आपके फ़ंक्शन सभी जगहों पर अलग-अलग प्रभाव डाल रहे हैं।

एक बेहतर उदाहरण की कमी में, विचार करें

 function fn() { global $foo; echo $foo; // side effect: echo'ing $foo = 'bar'; // side effect: changing } 

और फिर आप करते हैं

 $foo = 'foo'; fn(); // prints foo fn(); // prints bar <-- WTF!! 

यह देखने का कोई रास्ता नहीं है कि $foo इन तीनों लाइनों से बदल गया है क्यों एक ही फंक्शन को उसी तर्क से बुलाएगा जो सभी अचानक अचानक बदलते हैं या ग्लोबल स्टेट में वैल्यू बदलते हैं? किसी फ़ंक्शन को परिभाषित इनपुट वाई के लिए एक्स होना चाहिए। हमेशा।

OOP का उपयोग करते समय यह और अधिक गंभीर हो जाता है, क्योंकि ओओपी इनकैप्सुलेशन के बारे में है और वैश्विक दायरे तक पहुंचकर, आप इनकैप्सुलेशन को तोड़ रहे हैं। इन सभी सिंगलटन और रजिस्ट्रियां जो आप चौखटे में देखते हैं, कोड बदबू आ रही हैं जिन्हें निर्भरता इंजेक्शन के पक्ष में हटा दिया जाना चाहिए। अपना कोड घटाएं

और अधिक संसाधनों:

  • http://c2.com/cgi/wiki?GlobalVariablesAreBad
  • रजिस्ट्री पैटर्न या सिंगलटन को PHP में कैसे परीक्षण करना है?
  • दोष: भंगुर ग्लोबल स्टेट एंड सिंगलटन
  • static हानिकारक माना जाता है
  • क्यों सिंगलटन का PHP में उपयोग नहीं है
  • ठोस (वस्तु उन्मुख डिजाइन)

global खिलाफ एक बड़ा कारण यह है कि इसका मतलब है कि यह कार्य दूसरे अवसर पर निर्भर है। यह बहुत जल्दी गन्दा हो जाएगा

 $str1 = 'foo'; $str2 = 'bar'; $str3 = exampleConcat(); 

बनाम

 $str = exampleConcat('foo', 'bar'); 

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

global वैश्विक चीजों जैसे कि $db संसाधनों को शामिल करने के लिए भी खराब पैटर्न है ऐसा दिन आएगा जब आप $db का नाम बदलना चाहते हैं लेकिन ऐसा नहीं कर सकते, क्योंकि आपका पूरा एप्लिकेशन नाम पर निर्भर करता है।

किसी भी आधे रास्ते जटिल आवेदन लिखने के लिए चर के दायरे को सीमित करना और अलग करना आवश्यक है

ग्लोबल्स अपरिहार्य हैं

यह एक पुरानी चर्चा है, लेकिन मैं अभी भी कुछ विचार जोड़ना चाहूंगा क्योंकि मैं उपर्युक्त उत्तर में उन्हें याद करता हूं। उन उत्तरों को सरल करता है कि वैश्विक रूप से बहुत अधिक और वर्तमान समाधान हैं जो समस्या के सभी समाधान नहीं हैं। समस्या यह है कि वैश्विक वैरिएबल और वैश्विक खोजशब्द के उपयोग से निपटने का सही तरीका क्या है? इसके लिए हमें पहली बार जांचना और वर्णन करना होगा कि वैश्विक क्या है।

ज़ेंड के इस कोड पर एक नज़र डालें – और कृपया यह समझें कि मैं ज़ेंड को बुरी तरह से लिखे जाने का सुझाव नहीं देता:

 class DecoratorPluginManager extends AbstractPluginManager { /** * Default set of decorators * * @var array */ protected $invokableClasses = array( 'htmlcloud' => 'Zend\Tag\Cloud\Decorator\HtmlCloud', 'htmltag' => 'Zend\Tag\Cloud\Decorator\HtmlTag', 'tag' => 'Zend\Tag\Cloud\Decorator\HtmlTag', ); 

यहां कई अदृश्य निर्भरताएं हैं। वे स्थिरांक वास्तव में कक्षाएं हैं इस फ्रेमवर्क के कुछ पन्नों में आप need_once भी देख सकते हैं। Require_once एक वैश्विक निर्भरता है, इसलिए बाहरी निर्भरताएं बना रहा है यह ढांचे के लिए अनिवार्य है आप कितने बाहरी कोड के बिना डेकोरेटरप्लगिन प्रबंधक की तरह एक वर्ग बना सकते हैं जिस पर यह निर्भर करता है? यह बहुत सारे अतिरिक्त के बिना काम नहीं कर सकता ज़ेंड फ़्रेमवर्क का उपयोग करना, क्या आपने कभी एक अंतरफलक के कार्यान्वयन को बदल दिया है? एक अंतरफलक वास्तव में एक वैश्विक है

एक और विश्वव्यापी रूप से इस्तेमाल किया जाने वाला आवेदन ड्रुपल है। वे उचित डिजाइन के बारे में बहुत चिंतित हैं, लेकिन किसी भी बड़े ढांचे की तरह, उनके पास बहुत से बाहरी निर्भरताएं हैं इस पृष्ठ में ग्लोबल को देखें:

 /** * @file * Initiates a browser-based installation of Drupal. */ /** * Root directory of Drupal installation. */ define('DRUPAL_ROOT', getcwd()); /** * Global flag to indicate that site is in installation mode. */ define('MAINTENANCE_MODE', 'install'); // Exit early if running an incompatible PHP version to avoid fatal errors. if (version_compare(PHP_VERSION, '5.2.4') < 0) { print 'Your PHP installation is too old. Drupal requires at least PHP 5.2.4. See the <a href="http://drupal.org/requirements">system requirements</a> page for more information.'; exit; } // Start the installer. require_once DRUPAL_ROOT . '/includes/install.core.inc'; install_drupal(); 

कभी लॉगिन पृष्ठ पर रीडायरेक्ट लिखा है? यह एक वैश्विक मूल्य बदल रहा है (और फिर आप 'डब्ल्यूटीएफ' नहीं कह रहे हैं, जिसे मैं आपके आवेदन के खराब प्रलेखन की अच्छी प्रतिक्रिया के रूप में मानता हूं।) वैश्विक रूप से समस्या यह नहीं है कि वे वैश्विक हैं, एक सार्थक आवेदन करने के लिए आपको उनकी ज़रूरत है समस्या समग्र आवेदन की जटिलता है जो इसे संभाल करने के लिए एक दुःस्वप्न बना सकती है। सत्र वैश्विक हैं, $ _POST एक वैश्विक है, DRUPAL_ROOT एक वैश्विक है, इसमें / install.core.inc 'एक अनमोडीएबल वैश्विक है। किसी फ़ंक्शन के बाहर बड़ी दुनिया है जो कि उस कार्य को अपना काम करने के लिए आवश्यक है

गॉर्डन का जवाब गलत है, क्योंकि वह एक समारोह की स्वतंत्रता को ओवररेट करता है और फ़ंक्शन बुलाता है एक झूठा स्थिति को बड़ा कर रहा है। कार्य झूठ नहीं बोलते हैं और जब आप उसके उदाहरण पर एक नज़र डालें तो फ़ंक्शन को अनुचित रूप से डिज़ाइन किया गया है – उसका उदाहरण बग है (वैसे, मैं इस निष्कर्ष से सहमत हूं कि किसी को कोड को डिकॉप्लेट करना चाहिए।) धोखे का जवाब वास्तव में स्थिति की उचित परिभाषा नहीं है। फ़ंक्शन हमेशा एक व्यापक दायरे के भीतर कार्य करते हैं और उनका उदाहरण बहुत सरल है हम सभी उसके साथ सहमत होंगे कि यह कार्य पूरी तरह से बेकार है, क्योंकि यह निरंतरता देता है यह फ़ंक्शन किसी भी तरह खराब डिजाइन है। यदि आप यह दिखाना चाहते हैं कि अभ्यास खराब है, तो कृपया एक प्रासंगिक उदाहरण के साथ आओ। एक आवेदन भर में चर का नाम बदलने के लिए कोई अच्छा आईडीई (या उपकरण) नहीं है। प्रश्न चर के दायरे के बारे में है, फ़ंक्शन के दायरे में अंतर नहीं। इस प्रक्रिया में अपनी भूमिका करने के लिए एक उचित समय है (इसीलिए यह पहली जगह में बनाया गया है) और उस समय पर यह पूरे के रूप में आवेदन के कामकाज पर प्रभाव डाल सकता है, इसलिए यह भी वैश्विक चर पर काम कर रहा है । एक्सज़िफ़ेर का उत्तर तर्क के बिना एक बयान है ग्लोबल्स एक आवेदन में मौजूद हैं जैसे आपके पास प्रक्रियात्मक कार्य या OOP डिज़ाइन हैं एक वैश्विक मूल्य बदलने के अगले दो तरीके अनिवार्य रूप से समान हैं:

 function xzy($var){ global $z; $z = $var; } function setZ($var){ $this->z = $var; } 

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

बॉब फेंगजर पर टिप्पणी xzyfer

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

वैश्विक और वैश्विक खोजशब्दों के साथ काम करने में समस्या है और जब मैं ब्लॉग के बारे में लिखने वाला नहीं हूं, तो मैं अगले वाक्य का परिचय दूँगा: 'व्यक्तिगत हाँ, निजी नंबर' जब एक फ़ंक्शन अपने कामकाज के लिए एक वैश्विक चर के मूल्य को बदल रहा है, तो क्या मैं एक वैश्विक वैरिएबल और एक बग का निजी इस्तेमाल कहूँगा? लेकिन जब ग्लोबल वैरिएबल में बदलाव पूरी तरह से आवेदन के समुचित प्रसंस्करण के लिए किया जाता है, जैसे उपयोगकर्ता को लॉगिन पेज पर रीडायरेक्ट करना, तो यह है कि मेरी राय में संभवतः अच्छा डिज़ाइन नहीं है, परिभाषा के अनुसार नहीं और निश्चित रूप से नहीं विरोधी पैटर्न।

गॉर्डन, भ्रामक और एक्सज़िफ़र के जवाबों के पीछे की समीक्षा में: इन सभी के पास 'निजी हां' (और बग) उदाहरण हैं यही कारण है कि वे वैश्विक प्रयोग के विरोध में हैं। मैं भी ऐसा करूँगा वे, हालांकि, व्यक्तिगत हाँ, निजी नो-उदाहरणों के साथ नहीं आते हैं जैसे मैंने इस उत्तर में कई बार किया है

आसानी से global लिए शायद ही कोई कारण नहीं है और आधुनिक PHP कोड आईएमएचओ में कभी भी अच्छा नहीं है। खासकर यदि आप PHP 5 का उपयोग कर रहे हैं। और अतिरिक्त विशेषकर यदि आप ऑब्जेक्ट ओरिएंटेड कोड विकसित कर रहे हैं

ग्लोबल्स ने कोड की रख-रखाव, पठनीयता और testability पर नकारात्मक प्रभाव डाला। global कई उपयोग और निर्भरता इंजेक्शन के साथ प्रतिस्थापित किया जा सकता है या केवल पैरामीटर के रूप में वैश्विक वस्तु को पारित करना चाहिए

 function getCustomer($db, $id) { $row = $db->fetchRow('SELECT * FROM customer WHERE id = '.$db->quote($id)); return $row; } 

PHP में फ़ंक्शन के अंदर वैश्विक कीवर्ड का उपयोग करने से संकोच न करें। विशेष रूप से ऐसे लोग नहीं लेते जो बाहरी रूप से उपदेश देते हैं / चिल्लाते हैं कि कैसे वैश्विक 'बुराई' और क्या नहीं है

सबसे पहले, क्योंकि आप जो उपयोग करते हैं, पूरी तरह से स्थिति और समस्या पर निर्भर करता है, और कोई भी समाधान / कोडिंग में कुछ करने का तरीका नहीं है। समीकरण में 'बुराई' जैसे अपरिभाषित, व्यक्तिपरक, धार्मिक विशेषणों के भ्रांति को पूरी तरह से अलग करना

इसका स्पष्ट उदाहरण :

WordPress और इसकी पारिस्थितिकी तंत्र अपने कार्यों में वैश्विक खोजशब्द का उपयोग करता है। कोड OOP या नहीं OOP हो

और अब के रूप में WordPress मूल रूप से 18.9% इंटरनेट का है, और इसके चलते रॉयटर्स से सोनी तक, एनवाईटी तक, सीएनएन को लेकर अनगिनत दिग्गजों के बड़े पैमाने पर मेगासैट्स / ऐप चला रहे हैं।

और यह अच्छी तरह से करता है

कार्यों के अंदर वैश्विक खोजशब्दों का प्रयोग बड़े पैमाने पर ब्लॉकेट से वर्डप्रेस को मुक्त करता है जो कि इसके विशाल पारिस्थितिक तंत्र को दिया जाएगा। कल्पना कीजिए कि प्रत्येक फ़ंक्शन किसी भी वैरिएबल को पूछ रहा है / पास कर रहा है जो किसी अन्य प्लगइन, कोर और लौटने से आवश्यक है। प्लगइन अंतर-निर्भरता के साथ जोड़ा गया, जो चर के एक दुःस्वप्न या चर के रूप में पारित एरे के एक दुःस्वप्न में समाप्त होगा। ट्रैक करने के लिए एक नरक, डीबग करने के लिए एक नरक, विकसित करने के लिए एक नरक कोड ब्लोट और चर ब्लोट के कारण बहुत भारी स्मृति पदचिह्न बहुत लिखने के लिए कड़ी मेहनत

ऐसे लोग हो सकते हैं जो WordPress, इसके पारिस्थितिकी तंत्र, उनकी प्रथाओं और उन हिस्सों में जो चारों ओर चलते हैं की आलोचना करते हैं।

अर्थहीन, चूंकि यह पारिस्थितिकी तंत्र लगभग पूरे इंटरनेट का 20% है जाहिर है, यह काम करता है, इसका काम करता है और अधिक। इसका अर्थ वैश्विक खोजशब्द के लिए ही है।

एक और अच्छा उदाहरण है "आइफ्रेम बुरा हैं" कट्टरवाद एक दशक पहले यह आइफ्रेम का उपयोग करने के लिए पाषंड था। और इंटरनेट पर उनके आसपास हजारों लोग प्रचार कर रहे थे। फिर फ़ेसबुक आता है, फिर सामाजिक आता है, अब अगर आइफ्रेम हर जगह 'जैसे' बक्से से प्रमाणीकरण तक, और वोला हैं – सभी चुप रहें ऐसे लोग भी हैं जो अभी भी चुप नहीं हुए – सही या गलत तरीके से लेकिन आप जानते हैं कि इस तरह की रायओं के बावजूद जीवन क्या जाता है, और यहां तक ​​कि जो लोग एक दशक पहले आइफ्रेम के खिलाफ प्रचार कर रहे थे, उन्हें अब भी एक शब्द के बिना अपने संगठन के स्वयं के अनुप्रयोगों में विभिन्न सामाजिक ऐप्स को एकीकृत करने के लिए उपयोग करना है।

……

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

बहुमत के लिए, यह दुनिया एक कभी बदलती हुई दुनिया है जिसमें उन्हें खुले दिमाग और व्यावहारिक होना चाहिए। कट्टरवाद के लिए कोई जगह नहीं है, सूचना प्रौद्योगिकी के सामने की रेखाओं में 'बुराई' जैसे अपमानजनक कीवर्ड को छोड़ दें।

जो भी समस्या, एटी एचएंड के लिए सबसे अच्छा समझ में आता है, निकट, मध्यम और दीर्घकालिक भविष्य के लिए उपयुक्त विचारों के साथ। किसी भी सुविधा या दृष्टिकोण का उपयोग करने से दूर शर्मीली मत करें क्योंकि इसके खिलाफ कोई भी वैचारिक वैराग्य है, किसी भी सांकेतिक शब्दों में बदलनेवाला उपसमुच्चय के बीच

वे आपकी नौकरी नहीं करेंगे आप। अपने परिस्थितियों के अनुसार अधिनियम

मुझे लगता है कि सभी ने विश्व स्तर के नकारात्मक पहलुओं पर बहुत अधिक विस्तार किया है। इसलिए मैं ग्लोबल्स के उचित इस्तेमाल के लिए सकारात्मक और साथ ही निर्देश जोड़ूंगा:

  1. फ़ोकस के बीच जानकारी साझा करना वैश्विक स्तर का मुख्य उद्देश्य था वापस जब एक वर्ग की तरह कुछ भी नहीं था, php कोड कार्यों का एक गुच्छा शामिल। कभी-कभी आपको फ़ंक्शन के बीच जानकारी साझा करने की आवश्यकता होती है आम तौर पर वैश्विक रूप से इसे वैश्विक बनाकर डेटा को भ्रष्ट बनाने के जोखिम के साथ ऐसा करने के लिए इस्तेमाल किया गया था।

    कुछ खुश होने से पहले भाग्यशाली सरलटन निर्भरता इंजेक्शन के बारे में एक टिप्पणी शुरू करता है, मैं आपको यह पूछना चाहूंगा कि उदाहरण के उदाहरण जैसे get_post(1) फंक्शन के सभी निर्भरता कैसे जान जाएंगे। यह भी विचार करें कि निर्भरताएं भिन्न हो सकती हैं
    संस्करण और संस्करण सर्वर के लिए सर्वर निर्भरता इंजेक्शन के साथ मुख्य समस्या निर्भरता पहले से ही जानी जानी चाहिए। ऐसी स्थिति में जहां यह संभव नहीं है या अनचाहे वैश्विक वैरिएबल यह लक्ष्य हासिल करने का एकमात्र तरीका है।

    वर्ग के निर्माण के कारण, अब आम कार्यों को आसानी से एक कक्षा में समूहीकृत किया जा सकता है और डेटा साझा कर सकते हैं। मध्यस्थों जैसे कार्यान्वयन के माध्यम से भी असंबंधित वस्तुएं जानकारी साझा कर सकती हैं। यह अब आवश्यक नहीं है

  2. ग्लोबल्स के लिए एक अन्य उपयोग कॉन्फ़िगरेशन प्रयोजनों के लिए है अधिकतर एक स्क्रिप्ट की शुरुआत से पहले किसी भी ऑटोल लोडर्स को लोड किया गया है, डेटाबेस कनेक्शन बनाया गया है, आदि।

    संसाधनों के लोड होने के दौरान, डेटा को कॉन्फ़िगर करने के लिए ग्लोबल्स का उपयोग किया जा सकता है (यानी डेटाबेस का उपयोग करने के लिए डेटाबेस का उपयोग, सर्वर का यूआरएल आदि)। ऐसा करने का सबसे अच्छा तरीका define() फ़ंक्शन के उपयोग से होता है क्योंकि ये मान अक्सर बदलाव नहीं करते हैं और आसानी से एक विन्यास फाइल में रख सकते हैं।

  3. विश्व के लिए अंतिम उपयोग आम डेटा (यानी सीआरएलएफ, IMAGE_DIR, IMAGE_DIR_URL), मानव पठनीय स्थिति झंडे (यानी आईटीईआरएआर_आईएसयूआरसीआईएसईईईई) को पकड़ना है। यहां ग्लॉबल्स का उपयोग सूचनाओं को संग्रहीत करने के लिए किया जाता है जिसका इस्तेमाल उन अनुप्रयोगों के उपयोग के लिए किया जाता है जो उन्हें परिवर्तित करने के लिए अनुमति देता है और उन परिवर्तनों में आवेदन व्यापक दिखाई देते हैं।

  4. पीएचपी 4 के दौरान सिंगलटन पैटर्न लोकप्रिय हो गया, जब किसी ऑब्जेक्ट के प्रत्येक उदाहरण मेमोरी लेते थे। सिंगलटन ने केवल एक इमेजिंग को एक ऑब्जेक्ट बनाने की इजाजत देकर राम को बचाने में मदद की। संदर्भ से पहले भी निर्भरता इंजेक्शन एक बुरा विचार होता।

    PHP 5.4+ से ऑब्जेक्ट्स का नया PHP कार्यान्वयन इनमें से अधिकतर समस्याओं का ख्याल रखता है, जिससे आप ऑब्जेक्ट्स को सुरक्षित रूप से पास नहीं कर सकते हैं और कोई दंड नहीं कर सकते हैं। यह अब आवश्यक नहीं है

    सिंगलटन के लिए एक अन्य उपयोग एक विशेष उदाहरण है, जहां एक ऑब्जेक्ट का केवल एक इंस्टेंस एक समय में मौजूद होना चाहिए, यह उदाहरण स्क्रिप्ट निष्पादन के पहले / बाद मौजूद हो सकता है और उस ऑब्जेक्ट को विभिन्न स्क्रिप्ट / सर्वर / भाषाओं के बीच साझा किया जाता है। यहां एक सिंगलटन पैटर्न हल करता है बहुत अच्छी तरह से समाधान

तो निष्कर्ष में यदि आप स्थिति 1, 2 या 3 में हैं तो वैश्विक उपयोग करके उचित होगा हालांकि अन्य स्थितियों में विधि 1 का इस्तेमाल किया जाना चाहिए।

किसी भी अन्य उदाहरणों को अपडेट करने के लिए स्वतंत्र महसूस करें जहां वैश्विक प्रयोग किया जाना चाहिए।

ग्लोबल कीवर्ड के उपयोग से कॉन्सैट फ़ंक्शन बनाने में कोई मतलब नहीं है।

इसका इस्तेमाल वैश्विक वैरिएबल जैसे कि डेटाबेस ऑब्जेक्ट तक पहुंचने के लिए किया जाता है।

उदाहरण:

 function getCustomer($id) { global $db; $row = $db->fetchRow('SELECT * FROM customer WHERE id = '.$db->quote($id)); return $row; } 

यह सिंगलटन पैटर्न पर भिन्नता के रूप में इस्तेमाल किया जा सकता है