2010-04-04 12 views
10

किसी ने कहा कि जब आपका PHP कोड और एप्लिकेशन वैश्विक चर का उपयोग करता है तो यह स्पेगेटी कोड होना चाहिए (मुझे यह लगता है)। मैं वर्डप्रेस का बहुत उपयोग करता हूं। जहां तक ​​मुझे पता है, यह महान PHP सॉफ्टवेयर के पास सबसे अच्छी बात है। और यह इसके घटकों के बीच बातचीत करने के लिए कई वैश्विक चर का उपयोग करता है।स्पेगेटी कोड की विशेषताएं क्या हैं?

लेकिन इसके बारे में भूल जाओ, क्योंकि स्पष्ट रूप से, यह एकमात्र चीज है जो मुझे पता है। तो यह पूरी तरह पक्षपातपूर्ण है; डी

तो, मैं सिर्फ उत्सुक हूं, स्पेगेटी कोड की विशेषता क्या है?

पीएस: केवल एक चीज जो मुझे पता है वर्डप्रेस है। तो, उम्मीद है कि हो सकता है कि इससे किसी को किसी ऐसे व्यक्ति के लिए एक अच्छा जवाब मिलेगा जिसके पास PHP पर एक पूर्ण वेब एप्लिकेशन विकसित करने में थोड़ा सा अनुभव है (उदाहरण के लिए, स्टैक ओवरफ़्लो वेबसाइट)।

+1

'वैश्विक चर' के तहत आपका क्या मतलब है? –

+0

मेरा मतलब इस टिप्पणी में http://stackoverflow.com/questions/2571474/isset-and-php-global-variable – justjoe

+16

वर्डप्रेस मुख्यधारा में PHP प्रोग्रामिंग के ** सबसे खराब ** उदाहरणों में से एक है, और मुख्य कारण यह है कि वे वैश्विक चर पर अत्यधिक भरोसा करते हैं। इसकी वजह से सुरक्षा के लिए उनके पास एक भयानक प्रतिष्ठा है। मैं उदाहरणों को पोस्ट करता हूं कि यह क्यों बुरा है, लेकिन मैंने इसके बारे में एक लंबे समय से लिखा है (http://www.phpvs.net/2009/12/08/an-exercise-in-wordpress-integration-or-why- वर्डप्रेस-बेकार /)। यदि आप पीएचपी वेब अनुप्रयोगों का अनुभव अनुभव करना चाहते हैं, तो मैं ज़ेन, सिम्फनी या कोडइग्निटर जैसे कुछ PHP ढांचे को देखने का सुझाव दूंगा। – zombat

उत्तर

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

संक्षेप में, डिजाइन और पूर्वविवेक की कमी, और सिर्फ हैक्स एक साथ थप्पड़ मारा की एक उलझन। यह किसी भी भाषा पर लागू नहीं होता है, न केवल PHP।

कोई ऐसा जो बस FYI पीएचपी (उदाहरण के लिए, स्टैक ओवरफ़्लो वेबसाइट)

पर एक पूर्ण वेब अनुप्रयोग विकसित करने में थोड़ा अनुभव है, लेकिन स्टैक ओवरफ़्लो पीएचपी के साथ विकसित नहीं किया गया था के लिए

+0

@alex: क्या? मुझे लगता है कि इस दुनिया में हर वेब PHP का उपयोग करके विकसित होता है; डी – justjoe

+2

मान लीजिए कि हमें वह नहीं मिला जो नहीं! –

7

ठीक है, आपके द्वारा पोस्ट की गई टिप्पणी की बात करते हुए, स्पष्टीकरण बहुत आसान है। global ऑपरेटर का उपयोग कर एक चर का स्रोत अज्ञात है, स्पेगेटी नूडल के दूसरे छोर की तरह। इसे हर जगह परिभाषित किया जा सकता है। इसलिए, जब आप अपना फ़ंक्शन कॉल करते हैं, तो आपको पता नहीं होता कि इस चर के मूल्य क्या हैं।इसके बजाए, एक चर पारित करने से यह सादा और स्पष्ट हो जाता है:

function hello_testing($conditional_random) { 
    if ($conditional_random)) { 
     echo "foo is inside"; 
    } 
} 

पीएस http://en.wikipedia.org/wiki/Spaghetti_code

+2

अच्छा .. यह सिर्फ इतना नहीं है कि इसका स्रोत अज्ञात है, लेकिन यह ठीक से encapsulated नहीं है। यदि आप ग्लोबल स्पेस में सबकुछ फेंकना शुरू करते हैं, तो आप नाम संघर्ष और अन्य समस्याएं प्राप्त करना शुरू कर देते हैं ... – mpen

5

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

यही कारण है कि इस संदर्भ में GOTO कथन (डरावना शब्द!) अक्सर उद्धृत किया जाता है: GOTO कथन कोड आधार में किसी अन्य मनमाने ढंग से परिभाषित स्थान पर नियंत्रण स्थानांतरित करता है। अधिकांश प्रोग्रामिंग भाषाओं में ऐसे आदेश होते हैं जिनका goto शैली व्यवहार अनुकरण करने के लिए दुर्व्यवहार किया जा सकता है; उदाहरण के लिए, त्रुटियों को संभालने के बजाए नियमित व्यापार तर्क लागू करने के लिए अपवादों का उपयोग करना।

वैश्विक चर स्पेगेटी कोड में योगदान देते हैं क्योंकि मूल्य वर्तमान प्रोग्राम इकाई के दायरे से बाहर असाइन किए जाते हैं। इससे यह निर्धारित करना मुश्किल हो सकता है कि कोड बेस में एक चर को किसी दिए गए मान पर सेट किया गया है (या वास्तव में यह किसी भी मान पर सेट है)।

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

1

WordPress स्पेगेटी कोड PHP का सबसे बड़ा टुकड़ा है जिसे मैंने देखा है। PHP, HTML, जावास्क्रिप्ट और सभी चीजों के बीच एक ही फाइल में लम्बे सभी के बीच एक चौंकाने वाला मिश्रण है। यदि आप स्पेगेटी कोड का एक और उदाहरण चाहते हैं तो osCommerce या Zen Cart देखें।

वास्तव में मुझे लगता है कि ओपन सोर्स PHP अनुप्रयोगों का एक बड़ा बहुमत PHP में प्रोग्राम करने के तरीके के बारे में बहुत चौंकाने वाला उदाहरण है। यदि आप एक अच्छी संरचित उदाहरण (यानी, गैर-स्पेगेटी) देखना चाहते हैं तो Yii फ्रेमवर्क या Zend Framework देखें। फ्रेमवर्क जैसे CodeIgniter और Kohana, हालांकि स्पेगेटी नहीं, PHP 5 में चीजों को कैसे व्यवस्थित करने के बहुत अच्छे उदाहरण नहीं हैं क्योंकि वे PHP 4 में उपयोग की जाने वाली कई सुविधाओं का उपयोग करते हैं क्योंकि PHP 5 तक उन्हें करने का कोई बेहतर तरीका नहीं था (उदाहरण के लिए , वास्तविक वस्तु विरासत के बजाय पथ आधारित विरासत का उपयोग कर)।

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

+0

लेकिन कोहाना को PHP5 के लिए डिज़ाइन किया गया था और क्योंकि किसी दिन के लिए इसकी आवश्यकता होती है, जो आप इसके बारे में क्या कहते हैं, PHP5 के लिए संरचित नहीं किया जाता है। वर्डप्रेस के लिए, हालांकि एमवीसी नहीं, जो मुझे लगता है निराशा है, हां, एक उल्लेखनीय बात है क्योंकि विचित्र रूप से पर्याप्त यह आसान अनुकूलन और पुनः स्थापित किया गया है। ड्रापल की तुलना में यह अधिक एलेक्सा हिट क्यों है, यह कहने की हिम्मत है। बिना किसी संदेह के, यदि आप इन चीजों के लिए नए हैं, तो ड्रूपल वर्डप्रेस की तुलना में रीशेम और कस्टमाइज़ करना कठिन होता है। मैंने दोनों किया है, और Drupal के साथ शुरू किया। Kohana के बारे में गलत जानकारी के लिए – Volomike

+0

-1। यह ढांचा संरचना, कोडिंग शैली इत्यादि के मामले में सबसे अच्छे PHP उदाहरणों में से एक है। हालांकि यह शुरुआत में कोड इग्निटर पर आधारित था, लेकिन अब यह पूरी तरह से अलग है। –

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