2012-11-09 36 views
10

मैं PHP में मूल रूपरेखा तैयार कर रहा हूं। मुझे वर्तमान पृष्ठ के लिए डेटा को विभिन्न कार्यों में पास करने की आवश्यकता है, उन्हें संशोधित करने और सहेजने की अनुमति दें, और उसके बाद इसे प्रदर्शित करने के लिए पृष्ठ पर वापस भेज दें। मैं मूल रूप से $GLOBALS['data'] जैसे वैश्विक चर में डेटा संग्रहीत करने की योजना बना रहा था, लेकिन मुझे लगता है कि वैश्विक का उपयोग करना एक बुरा विचार है। इसलिए मैं सोच रहा हूं कि इसके बजाय मैं सिस्टम क्लास में स्थिर चर डाल दूंगा, और इसे system::$data का उपयोग करके एक्सेस करूँगा। तो, मेरा सवाल है, जो बेहतर होगा और क्यों?PHP बनाम वैश्विक बनाम स्थिर चर

यह:

$GLOBALS['data'] = array(); 
$GLOBALS['data']['page_title'] = 'Home'; 
echo $GLOBALS['data']['page_title']; 

या इस:

class system 
{ 
    public static $data = array() 
} 

function data($new_var) 
{ 
    system::$data = array_merge(system::$data, $new_var); 
} 

data(array('page_title' => 'Home')); 
echo system::$data['page_title']; 

उत्तर

11

वहाँ वास्तव में एक वैश्विक चर और एक public static चर के बीच कोई अंतर नहीं है। क्लास वेरिएबल को थोड़ा सा बेहतर नाम दिया गया है, लेकिन यह शायद ही कोई फर्क पड़ता है। दोनों किसी भी समय कहीं भी सुलभ हैं और दोनों वैश्विक स्थिति हैं।
How Not To Kill Your Testability Using Statics

+4

भयानक लेख –

+0

क्या कोई प्रदर्शन अंतर है? ऐसा लगता है कि ग्लोबल एक स्थिर चर का उपयोग करने के रूप में कुशल नहीं हैं। –

+2

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

1

तो, मेरे सवाल है, बेहतर हो सकता है और यही कारण है कि होगा:

ऐसा होता है, मैं तो बस इस विषय पर एक विस्तृत लेख लिखा था?

आप पहले से ही समझते हैं कि यह सब कुछ ग्लोबल्स में डालने में कुछ समस्या है। यद्यपि आपने कक्षाओं में चीजों को समाहित करने के लिए कुछ विचार विकसित किए हैं।

मुझे लगता है कि यह एक अच्छा प्रारंभिक बिंदु है। के शुरुआत में इस अधिक धाराप्रवाह पाने के लिए खाना पकाने के लिए कुछ और मसाले करते हैं:

$data = new ArrayObject(array()); 
$data['page_title'] = 'Home'; 

अब आप एक वस्तु बनाई है, जिसे आप अपने डेटा युक्त साथ पारित कर सकते हैं। बस उस क्षेत्र के लिए $data पास करें जहां इसकी आवश्यकता है। कोई वैश्विक या वैश्विक स्थैतिक चर आवश्यक नहीं है।

आप अपने प्रकार के साथ ArrayObject से विस्तार करके उस प्रकार को और अधिक ठोस बना सकते हैं।

+0

एक एफवाईआई के रूप में, इस पोस्ट से पूरी तरह से असंबंधित, हम 60 दिनों से अधिक पुराने प्रश्नों को माइग्रेट नहीं कर सकते हैं। – NullUserException

+0

@NullUserException: नोटिस के लिए धन्यवाद। – hakre

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