कई स्रोतों के अनुसार, register_globals (वैश्विक चर जो है) आपके php.ini में अक्षम होना चाहिए। क्या मुझे अपने कोड में परिभाषित() लिखना चाहिए और वैश्विक चर अक्षम होने पर स्थिरांक का उपयोग करना चाहिए? क्या वे भी संबंधित हैं?PHP- वैश्विक चर और स्थिरांक के बीच क्या अंतर है
उत्तर
वे इस बात से संबंधित हैं कि उनके पास वैश्विक दायरा है, लेकिन स्थिरांक एक बार परिभाषित नहीं होने के लिए हैं, वैश्विक वैरिएबल के विपरीत, जिस पृष्ठ के साथ यह संशोधित हो सकता है। तो बस वैश्विक के बजाय define() का उपयोग करने के लिए स्विचिंग बहुत मदद नहीं करेगा।
यह बेहतर है कि आप पैरामीटर के रूप में चर लेने के लिए अपने तरीकों को दोबारा सुधारें और चारों ओर चर पारित करने के लिए उस पर भरोसा करें।
कॉन्स्टेंट, जिसे एक बार परिभाषित किया गया है, बदला नहीं जा सकता है।
स्थिरांक के रूप में स्थिरांक का उपयोग न करें। यदि आपको कार्यों के भीतर चर का उपयोग करने की आवश्यकता है, तो उन्हें फ़ंक्शन में ही पास करें। जिस तरह से इसका इस्तेमाल किया जाना था, उसमें सबकुछ इस्तेमाल करें। चर परिवर्तनीय और कॉन्स्टेंट स्थिर हैं।
यहां कुछ चीज़ें हैं।
सबसे पहले, आपके php.ini में अक्षम रजिस्टर_globals एक पुरानी PHP सुविधा को संदर्भित करता है जहां एक क्वेरी स्ट्रिंग (जीईटी) या फॉर्म (जीईटी/पीओएसटी) के माध्यम से भेजा गया कोई वैरिएबल वैश्विक PHP चर में परिवर्तित हो जाएगा। जब आप register_globals बंद करते हैं तो यह कार्यक्षमता (और होना चाहिए) अक्षम है। इसके साथ ही, आप अभी भी अपने आवेदन में वैश्विक चर परिभाषित कर सकते हैं।
सामान्य प्रोग्रामिंग शब्दों में, वैश्विक चर (PHP के रजिस्टर_ग्लोबल्स नहीं) को "खराब" माना जाता है क्योंकि जब आप प्रोग्रामर के रूप में सामना करते हैं, तो आपको पता नहीं होता कि एप्लिकेशन के अन्य भाग इसका उपयोग या परिवर्तन कर सकते हैं या इसका क्या प्रभाव हो सकता है उस वैश्विक में आपके परिवर्तन हो सकते हैं। साथ ही, यदि आप एक नए ग्लोबल वैरिएबल को परिभाषित कर रहे हैं, तो एक मौका है कि आप किसी मौजूदा चर को ओवरराइट करने जा रहे हैं जिसे कोई और भरोसा कर रहा है। जब चर को स्थानीय रूप से परिभाषित किया जाता है (एक समारोह में, या अन्य भाषाओं में एक एकल ब्लॉक में) आप स्थानीय दायरे की जांच कर सकते हैं और आमतौर पर यह निर्धारित कर सकते हैं कि उस चर में क्या परिवर्तन होगा।
दूसरी ओर, स्थिरांक कभी नहीं बदलते हैं। आप उन्हें एक बार परिभाषित करते हैं, और वे परिभाषित रहते हैं और कोई भी उन्हें बदल नहीं सकता है। यही कारण है कि ग्लोबल स्थिरांक होने से ग्लोबल स्थिरांक को "कम बुरा" माना जाता है।
तब भी स्थिर हैं? क्या मुझे निर्देशिका नामों जैसे सामानों को पास करने के लिए सत्रों का उपयोग करना चाहिए? – Gal
स्थिरांक केवल 'कम खराब' नहीं हैं। वे कई मामलों में उपयोग करने के लिए एक पूरी तरह से स्वीकार्य बात है, जैसे गैल निर्देशिकाओं के बारे में क्या कह रहा है। – GSto
स्थिरांक, ठीक हैं, हालांकि आप ठोस तर्क है कि आप वैश्विक नामस्थान में स्थिरांक उपयोग नहीं करना चाहिए मिल जाएगा (यानी केवल वर्ग स्थिरांक इस्तेमाल किया जा सोचा)। यहां कोई सही जवाब नहीं है, केवल अलग-अलग व्यापार बंदियों के साथ जवाब। –
वैश्विक चर स्थिर नहीं हैं (आप वैश्विक चर के मान को बदल सकते हैं, लेकिन आप केवल एक बार स्थिर परिभाषित कर सकते हैं)।
कॉन्स्टेंट हमेशा वैश्विक नहीं होते (आप कक्षा में निरंतर घोषित कर सकते हैं)। अदिश, सरणी, या वस्तु:
इसके अलावा, वैश्विक चर के किसी भी प्रकार के हो सकता है। Constants केवल scalars हो सकता है।
मैं कहने वाला नहीं हूं कि या तो स्थिरांक या ग्लोबल्स अच्छे या बुरे हैं। जब उचित रूप से उपयोग किया जाता है, तो दोनों के पास फायदेमंद उपयोग होते हैं। register_globals
सुविधा के आसपास सुरक्षा समस्याएं हैं जो ग्लोबल्स के अधिक सामान्य उपयोग से अलग हैं।
कुछ निरंतर उदाहरण:
<?php
// Certainly constant
define('MINUTES_PER_HOUR', 60);
define('DOZEN', 12);
// Constant, but specific to this application
define('GREETING', 'Dear %s');
define('TIMEOUT', 30);
// Configurable, but constant for this installation
define('DATABASE', 'mydb');
define('IMAGES_DIRECTORY', '/tmp/images');
// Not constant, or some other reason why can't be constant
$user = $_POST['userid'];
$days_of_week = array('Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su');
?>
यह साधारण परीक्षण का प्रयास करें:
fileA.php:
<?php
define('SOMEVAL', 2);
?>
fileB.php:
<?php
if(defined('SOMEVAL')) echo SOMEVAL;
else echo "SOMEVAL does not exists\n";
include 'fileA.php';
if(defined('SOMEVAL')) echo 'SOMEVAL='.SOMEVAL;
else echo "SOMEVAL does not exists\n";
?>
फिर fileB चलाते हैं। php और आप देखेंगे कि मैं आप से पहले fileA.php को छोड़ दें, SOMEVAL परिभाषित नहीं किया गया है। तो इसका मतलब यह है कि आप कुछ भी परिभाषित करने से पहले, यह स्क्रिप्ट के लिए दृश्यमान नहीं होगा। बाकी
कुछ विचार करने के लिए - स्थिरांक, सरणियों या वस्तुओं की तरह बातें की दुकान नहीं कर सकते हैं कुछ $ करने के लिए परिभाषित जबकि वैश्विक किसी भी वैरिएबल प्रकार हो सकता है। तो कुछ मामलों में, यदि आपको वैश्विक होने के लिए कुछ चाहिए तो इसे परिभाषित() का उपयोग करके निरंतर संग्रहित नहीं किया जा सकता है, तो आप इसके बजाय $ GLOBALS का उपयोग करना चाहेंगे।
इसके अलावा, रजिस्टर और $ वैश्विक एक ही बात नहीं कर रहे हैं!
यदि आप दोनों का एक ही नाम है, तो आप ग्लोबल वैरिएबल को फ़ंक्शन के अंदर बदल सकते हैं, क्योंकि स्थानीय चर वैश्विक चर को ओवरराइड करते हैं लेकिन ग्लोबल वैरिएबल out.in के मान को नहीं बदलते हैं, यदि आप अलग-अलग नाम वैरिएबल का उपयोग करना चाहते हैं फ़ंक्शन जो आपको अनुमति नहीं देता है और त्रुटि देता है, क्योंकि यह एक बार परिभाषित करता है और सभी प्रोग्राम में उपयोग किया जाता है और आप किसी भी फ़ंक्शन या ब्लॉक में इस चर के मान को नहीं बदल सकते हैं, यह निश्चित मान है।
- 1. PHP चर में सत्र चर और वैश्विक चर के बीच क्या अंतर है?
- 2. स्थिर स्थिरांक और कॉन्स के बीच क्या अंतर है?
- 3. सदस्य चर और स्थानीय चर के बीच क्या अंतर है?
- 4. वैश्विक कतार और उपयोगकर्ता कतारों के बीच क्या अंतर है?
- 5. सी में मैक्रो स्थिरांक और निरंतर चर के बीच क्या अंतर है?
- 6. वैश्विक और डिवाइस कार्यों के बीच अंतर
- 7. php cli और php cgi के बीच क्या अंतर है?
- 8. वैश्विक चर और मैपलियर
- 9. php - वेबसाइट वैश्विक चर
- 10. वैश्विक चर, PHP
- 11. वहाँ एक वैश्विक चर और वैश्विक वस्तु
- 12. हस्ताक्षरित और हस्ताक्षरित चर के बीच क्या अंतर है?
- 13. किसी संपत्ति और आवृत्ति चर के बीच क्या अंतर है?
- 14. PHP के बीच क्या अंतर है और इसमें शामिल है?
- 15. "$^एन" और "$ +" के बीच क्या अंतर है?
- 16. सी ++ में स्थिर वैश्विक और गैर स्थैतिक वैश्विक पहचानकर्ता के बीच क्या अंतर है?
- 17. भिन्नता और '-' के बीच क्या अंतर है?
- 18. अभिव्यक्तियों के बीच उन PHP के बीच क्या अंतर है?
- 19. php, strtolower और mb_strtolower के बीच क्या अंतर है?
- 20. PHP में iconv() और mb_convert_encoding() के बीच क्या अंतर है?
- 21. PHP: $ var और $ var के बीच क्या अंतर है?
- 22. PHP में, 'stripcslashes' और 'stripslashes' के बीच अंतर क्या है?
- 23. PHP और HTML फ़ाइल एक्सटेंशन के बीच क्या अंतर है?
- 24. php में $ a और $$ के बीच क्या अंतर है?
- 25. PHP में। = और + = के बीच क्या अंतर है?
- 26. PHP में सत्र और कुकी के बीच क्या अंतर है?
- 27. PHP: SimpleXMLElement() क्लास और SimpleXML_load_string() के बीच क्या अंतर है?
- 28. PHP में, हैश और म्हाश के बीच क्या अंतर है?
- 29. PHP में is_callable और function_exists के बीच क्या अंतर है?
- 30. पूर्णता चर और सेमफोर के बीच अंतर
मैं चाहता हूँ निर्देशिका नाम है कि सब कुछ खत्म हो वैश्विक है, और सुलभ हो जाएगा जैसे कुछ पूर्व निर्धारित चर होने की संभावना नहीं है, तो। मैं भी वैश्विक चर अक्षम करना चाहता हूं। क्या मैं इस मामले में परिभाषित() का उपयोग कर सकता हूं? – Gal
यदि आप परिवर्तनीय को संशोधित करने का इरादा नहीं रखते हैं तो पेज निष्पादित होता है, फिर हां, यह परिभाषित करने के लिए उचित उपयोग है। – Parrots
@Gal, हाँ, यह एक अच्छा कारण उन्हें इस्तेमाल करने के रूप में आप रन-टाइम में बदलते निर्देशिकाओं होने के लिए नहीं जा रहे हैं। – GSto