उपयोगी टिप्स

स्क्रिप्ट को सही तरीके से लिखना सीखना

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

1.1। PHP स्क्रिप्टिंग

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

इसके सिंटेक्स द्वारा, PHP भाषा क्लासिक सी के समान है, हालांकि जावा और पर्ल से कुछ उधार भी दिखाई देते हैं। कम से कम एक सी प्रोग्रामर बहुत जल्दी इस भाषा में मास्टर करेगा और अधिकतम दक्षता के साथ इसका उपयोग करने में सक्षम होगा।
सिद्धांत रूप में, PHP में मानक GNU C (या उनके एनालॉग्स) में लगभग सभी ऑपरेटर और फ़ंक्शन उपलब्ध हैं, उदाहरण के लिए, लूप्स (जबकि, इसके लिए), स्टेटमेंट्स (यदि, स्विच) का चयन करें, फ़ाइल सिस्टम और प्रक्रियाओं के साथ काम करने के लिए फ़ंक्शन (fopen,) * डीआईआर, स्टेट, अनलिंक, पोपेन, एक्जीक्यूट), इनपुट-आउटपुट फ़ंक्शंस (फ़ेट्स, फ़ुटपुट्स, प्रिंटफ़) और कई अन्य।
PHP और C के बीच सबसे बड़ा अंतर है चरों का उपयोग।

1.3। PHP चर

PHP का उपयोग करते समय आपकी आंख को पकड़ने वाली पहली चीज टाइप किए गए चर की कमी है, हालांकि कुछ टाइपिंग मौजूद है, लेकिन प्रत्येक विशेष विवरण में चर का प्रकार संदर्भ पर निर्भर करता है, उदाहरण के लिए, चर $ str = "10" जब इको ($ str) ऑपरेटर में उपयोग किया जाता है एक स्ट्रिंग प्रकार होगा (हाँ, हाँ, आप चार * के बारे में भूल सकते हैं), और $ str = $ str + 1 जैसी अभिव्यक्ति में एक संख्या के रूप में माना जाएगा।
यद्यपि यह एक कमी की तरह लग सकता है, PHP की यह विशेषता समझ में आती है, क्योंकि HTML इनपुट रूपों के परिणामों को संसाधित करते समय प्रारंभिक प्रकार के चर को निर्धारित करना बहुत मुश्किल है, और इसके अलावा, सभी प्रकार के परिवर्तनों को php पर दोषी ठहराया जा सकता है (और itoa और atoi को भूल जाएं)।
इसके अलावा, PHP की दिलचस्प विशेषताओं में से एक है, वातावरण चर और स्क्रिप्ट मापदंडों का स्वचालित रूप से PHP चर में स्थानांतरण, और URL- एन्कोडेड चर मानों को सामान्य चर में अनुवाद करने की आवश्यकता नहीं है, उदाहरण के लिए, जब पैरामीटर str = पाठ% 20ww% 20spaces स्क्रिप्ट के लिए (GET /some_script.php प्रकार का अनुरोध) पास करना। ? str = text% 20with 20spaces HTTP / 1.0) चर $ str = "रिक्त स्थान वाला पाठ" बनेगा।

PHP में विभिन्न प्रकार की वस्तुओं के प्रसंस्करण के लिए कई अंतर्निहित कार्य हैं। (PHP 3.0 फ़ंक्शंस संदर्भ)

PHP में तार के साथ काम करना सी की तुलना में बहुत समृद्ध है। इस तथ्य के अलावा कि लगभग सभी मानक सी भाषा फ़ंक्शन हैं, कई अतिरिक्त कार्य और विशेषताएं हैं जो दोनों वेब-उन्मुख हैं और बस काम को आसान बनाते हैं। विशेष रूप से, स्ट्रिंग संवहन निम्न ऑपरेटर द्वारा किया जाता है: $ result_str = $ first_str। $ second_str,
वेब में काम करने के लिए उपयोगी फ़ंक्शंस के उदाहरण htmlspecialchars () फ़ंक्शंस हैं, जो & प्रकार के वर्णों को एक स्ट्रिंग में और एक स्ट्रिंग में, या urlencode (स्ट्रिंग str) फ़ंक्शन में परिवर्तित करता है, जो रूसी वर्णों को एक अनुक्रम XX में परिवर्तित करता है, जहां XX वर्ण का हेक्साडेसिमल कोड है। नियमित अभिव्यक्ति फ़ंक्शंस भी बहुत दिलचस्प हैं, उदाहरण के लिए $ str = ereg_replace ("/ usr / स्थानीय / (^ / *) / फ़ाइल नाम", " 1", "/ usr / स्थानीय / dirname / फ़ाइलनाम") हमें दे देंगे स्ट्रिंग $ str = "dirname"। या, उदाहरण के लिए, विस्फोट फ़ंक्शन, मैं व्यक्तिगत रूप से बहुत प्रसन्न था: यह फ़ंक्शन आपको स्ट्रिंग को मूल्यों की एक सरणी में बदलने की अनुमति देता है, उदाहरण के लिए, अगला चयन तत्व बनाने के लिए

निम्नलिखित कोड का उपयोग किया गया था:

2.2। फ़ाइलों और प्रक्रियाओं के साथ काम करें

PHP में फ़ाइलों के साथ काम करना C में फ़ाइलों के साथ काम करने से व्यावहारिक रूप से अलग नहीं है, धाराओं के साथ या ब्लॉक फ़ाइलों के साथ काम करने के समान कार्य, fopen, fclose, fread, fgets, fputs, fwrite, लेकिन वहाँ एक छोटी लेकिन बहुत अच्छी सुविधा है उदाहरण के लिए, उनके URL की फ़ाइलों के साथ काम करना, निम्नलिखित निर्माण संभव हैं:
$ fp = fopen ("http://www.soft.ru/", "r"),
$ fp = fopen ("ftp://www.soft.ru/", "r"),
और, PHP के सबसे बड़े आकर्षण में से एक, मेरी राय में, अन्य कार्यक्रमों का उपयोग करने की क्षमता है, उदाहरण के लिए, वर्तमान निर्देशिका की सूची प्राप्त करने के लिए, मानक एलएस कमांड का उपयोग करें, या मेल भेजने वाले का उपयोग करके मेल भेजें। यह इस तथ्य से प्राप्त होता है कि php आपको एक प्रक्रिया बनाने और इसके मानक इनपुट या मानक आउटपुट के साथ एक नियमित स्ट्रीम के साथ काम करने की अनुमति देता है। (popen कमांड, उदाहरण के लिए $ fp = popen ("/ bin / ls -l", "r"),)।

2.3। डेटाबेस के साथ काम करें

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

एक उदाहरण के रूप में, हम एक कोड देते हैं जो एक साधारण टेबल से होता है जिसमें फोन नंबर और कंपनी के नाम होते हैं। कोड के परिणामस्वरूप, निम्नलिखित निकला:

फोन नंबर खरीद-बेच कार्यालय222-33-44 GlavSovSnab333-44-55 मूस्ट DiE444-55-66

और दिए गए तालिका का गठन निम्न php कोड द्वारा किया गया था:









// अगली पंक्ति पढ़ें?> Var13 ->
// समय का अंत?> Var13 -> पाश
कंपनी का नामफोन नंबर
// वर्तमान पंक्ति से नाम फ़ील्ड प्रिंट करें?> Var13 ->// वर्तमान पंक्ति से फ़ोन फ़ील्ड प्रिंट करें?> Var13 ->

तो, धीरे-धीरे हम निम्नलिखित निष्कर्ष पर आते हैं: लिखने के लिए अक्सर अद्यतन या बोझिल होने वाले कार्यक्रमों को बनाते समय PHP का उपयोग करना उचित होता है, जिसके लिए निष्पादन की गति एक महत्वपूर्ण पैरामीटर नहीं है (जिसका अर्थ है कि यदि C स्क्रिप्ट के निष्पादन समय और PHP स्क्रिप्ट के बीच का अंतर 10 है -20%, फिर निष्पादन गति के विकास की गति को प्राथमिकता देना काफी संभव है) और पूरी तरह कार्यात्मक अनुप्रयोग का तेजी से निर्माण आवश्यक है। (यदि मेरी व्यक्तिगत राय दिलचस्प है, तो PHP के अलावा मैं केवल C का उपयोग करता हूं, और फिर, बहुत कम ही।)

1. स्थानीय मशीन और सर्वर पर PHP की स्थापना।

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

लेकिन पहले, मैं Apache modul या fast-CGI की तरह PHP को कॉन्फ़िगर करने के तरीके पर थोड़ा विषयांतर करना चाहता हूं।
सबसे अच्छा विकल्प इसे वेब सर्वर मॉड्यूल के रूप में कॉन्फ़िगर करना है। ऐसा करने के लिए, अपाचे वेब सर्वर के httpd.conf कॉन्फ़िगरेशन फ़ाइल में निम्न पंक्तियाँ लिखें:

FastCGI के विपरीत - निम्नलिखित। पहला वाला। FastCGI के साथ, php.ini को लगभग हर दूसरी बार वेब सर्वर की मेमोरी में लोड किया जाएगा जब स्क्रिप्ट चलाए जाने पर, अपाचे मॉड्यूल के रूप में स्थापित करते समय, PHP कॉन्फ़िगरेशन केवल तभी लोड किया जाएगा जब वेब सर्वर लोड या पुनरारंभ हो जाएगा, सर्वर पर गति और लोड कम होगा। इसके अलावा, जब fastCGI के रूप में स्थापित किया जाता है, तो कुछ कार्य उपलब्ध नहीं होते हैं। नौसिखिए प्रोग्रामर को उनकी आवश्यकता नहीं होगी। लेकिन एक बड़े इंटरनेट एप्लिकेशन को विकसित करते समय, आप समस्याओं में भाग सकते हैं। लेकिन समस्याओं को सबसे अच्छा रोका जाता है।

अब हम PHP के विन्यास पर चलते हैं। Php.ini कॉन्फ़िगरेशन फ़ाइल में, नीचे लिखे मूल्यों के साथ निम्नलिखित निर्देशों को स्थापित करना अनिवार्य है:

लॉग फाइल में त्रुटियों को लिखना है या नहीं, यह आप पर निर्भर है।
होस्ट कंपनी में सर्वर पर, सुरक्षा कारणों से इन सभी निर्देशों को बंद करना सुनिश्चित करें, ताकि एक संभावित हमलावर यह पता न लगा सके कि आपकी स्क्रिप्ट कहाँ हैं। लेकिन अच्छे के लिए, जब आप पहले से ही वैश्विक नेटवर्क पर अपनी स्क्रिप्ट प्रकाशित कर रहे हैं, तो इसमें कोई त्रुटि नहीं होनी चाहिए।
इसके अलावा

डिफ़ॉल्ट रूप से, max_execution_time निर्देश का मूल्य 30 है, लेकिन गति के लिए, कम सेट करना बेहतर है। यदि आपके पास कुछ "अटक" है, तो यह समझने के लिए 10 सेकंड पर्याप्त हैं।

अध्याय 3 में मैं इस बारे में अधिक विस्तार से बात करूंगा ...

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

2. "@" कहाँ दफनाया गया है?

यह नौसिखिए प्रोग्रामर की शायद सबसे बुनियादी गलती है - "@" का उपयोग। यह प्रतीक, किसी भी ऑपरेटर द्वारा लॉग में त्रुटि आउटपुट और उसकी रिकॉर्डिंग को दबाने से पहले। यह आपको डिबगिंग चरण में त्रुटि को ट्रैक करने की अनुमति नहीं देता है, और आप यह समझने की कोशिश कर रहे हैं कि मामला क्या है।

एक ज्वलंत उदाहरण। मान लें कि हमने $ "f = fopen (" fle.txt "," w + ") लाइन से पहले प्रतीक" @ "डाला,"। यदि हम केवल सबसे आम त्रुटियों को लेते हैं, जो बाद के राइटराइट के दौरान हो सकती है, उदाहरण के लिए, तो यह है: ए) फ़ाइल तक पहुंचने की कोई अनुमति नहीं है, बी) फ़ाइल मौजूद नहीं है, ग) फोपेन को सुरक्षित मोड में नहीं बुलाया जा सकता है। कल्पना करें कि कितने त्रुटि विकल्प हो सकते हैं? बहुत कुछ। और आप कैसे यह पता लगाने जा रहे हैं कि आपके लिए किस तरह की त्रुटि हुई, क्योंकि आपने "@" प्रतीक के साथ उनके आउटपुट को दबा दिया था।

इसलिए, सख्ती से सख्ती से आपको @ का उपयोग करने से मना किया जाता है।

आप पूछते हैं, फिर त्रुटि को प्रदर्शित होने से कैसे रोका जाए?
त्रुटि को प्रदर्शित न करने के लिए, इसे या तो रोका जाना चाहिए, जैसा कि फ़ाइलों के मामले में होता है, अर्थात, अस्तित्व के लिए फ़ाइल की जाँच करें, b) जाँच करें, या आप कर सकते हैं (अधिकार है) इसके लिए कुछ लिखें is_writeable ()।

अन्य मामलों में, उदाहरण के लिए, जब mysql_connect () का उपयोग करते हैं, तो आपको उस मान की जांच करने की आवश्यकता होती है जो फ़ंक्शन देता है। एक नियम के रूप में, यह निर्धारित करने के लिए इस्तेमाल किया जा सकता है कि क्या कोई त्रुटि है या नहीं। आमतौर पर, एक त्रुटि FALSE, NULL या एक रिक्त स्ट्रिंग लौटाती है।

यह आपको उपयोगकर्ता को एक गैर-रिक्त पृष्ठ देने की अनुमति देगा यदि, उदाहरण के लिए, उसने जानकारी ((N = 14) तक पहुंचने का प्रयास किया, और जानकारी आपकी फ़ाइलों में संग्रहीत है और फ़ाइल 14 मौजूद नहीं है, और संदेश पाठ है: "जानकारी नहीं मिली" ।

स्क्रिप्ट चलाते समय बग्स को पकड़ना भी सुरक्षा का एक बहुत महत्वपूर्ण पहलू है।

3. register_globals = बंद और कुछ नहीं।

यदि पहले दो अध्यायों में मैंने उन क्षणों पर ध्यान केंद्रित किया है जो एक नौसिखिए प्रोग्रामर का तुरंत सामना करेंगे, तो इस अध्याय में मैं एक क्षण के बारे में बात करूंगा जो बाद में दिखाई देगा ... अक्सर हर कोई इसका सामना करता है जब एक स्क्रिप्ट (रेडी-मेड) को सर्वर होस्टिंग में स्थानांतरित किया जाता है। प्रदाता। व्यक्तिगत रूप से, मुझे एक लंबे समय के लिए register_globals = ऑफ करने की आदत है, इसलिए जो साथी प्रोग्रामर शुरू कर रहे हैं, वे तुरंत इस निर्देश को बंद कर देते हैं। इसके अलावा, यह क्षण स्क्रिप्ट की सुरक्षा सुनिश्चित करने में बहुत महत्वपूर्ण है।

So. पूरी पूँछ क्या है पहले, उस मामले पर विचार करें जहां हमारे पास register_globals = On है। जैसा कि आप शायद पहले से ही जानते हैं, डेटा को तीन तरीकों से एक स्क्रिप्ट में स्थानांतरित किया जा सकता है, अशिष्टता से कहा जा सकता है, वास्तव में, उनमें से दो हैं। पहला GET है, अर्थात डेटा को "?" वर्ण के बाद ब्राउज़र के एड्रेस बार के माध्यम से प्रेषित किया जाता है, दूसरा POST है, जब इसका उपयोग किया जाता है, तो डेटा उपयोगकर्ता के लिए अंतर्निहित रूप से प्रसारित होता है। POST विधि का उपयोग आमतौर पर फॉर्म डेटा जमा करने के लिए किया जाता है। खैर, तीसरा कूकीज उपयोगकर्ता से स्क्रिप्ट के लिए पारित किया गया है।

इस मामले पर विचार करें। क्या हमारे पास index.php पर एक फॉर्म है? प्रपत्र। कई पाठ फ़ील्ड फ़ील्ड के रूप में। इसे परिवार, नाम, फोन होने दें। फॉर्म एक ही index.php को भेजा जाता है लेकिन POST विधि द्वारा। सभी डेटा की जांच करने के बाद, हमने उपयोगकर्ता के नाम और परिवार के साथ दो कुकीज़ रिकॉर्ड किए, दूसरे में हमने उदाहरण के लिए, फॉर्म तक पहुंच का समय दर्ज किया।

कल्पना करें कि हमारे पास index.php फ़ाइल का हिस्सा है जिसमें निम्नलिखित कोड हैं, अर्थात्। यदि उपयोगकर्ता प्रपत्र पर पहले ही डेटा दर्ज कर चुका है, तो उसे उसे दिखाया जाता है, यदि नहीं, तो फॉर्म प्रदर्शित होता है। और यह सब index.php? फॉर्म में है।

अब इसके बारे में सोचें। $ फॉर्म में क्या होगा, क्योंकि हम चर को GET पैरामीटर और कूकीज के माध्यम से पास करते हैं। यहाँ। इसके अलावा, आप इस बात की त्रुटि खोज लेंगे कि $ फॉर्म खाली क्यों है या इसके विपरीत।

यानी वास्तव में, यह सभी चर की जगह की संभावना को उबालता है। वास्तव में, यह सुरक्षा में एक महत्वपूर्ण ऋण है, क्योंकि यह बहुत संभावना है कि एक हमलावर सर्वर पर किसी भी महत्वपूर्ण फाइल को देखने में सक्षम होगा।

अब इसे रजिस्टर_ग्लोबल्स = ऑफ के तहत कैसे लागू किया जाए

PHP में कई वैश्विक सरणियाँ हैं। $ _GET, $ _POST, $ _COOKIE, $ _REQUEST (सुरक्षा कारणों से पहले तीन का संयोजन अनुशंसित नहीं है), $ _FILES (फ़ाइल एप्लेट के लिए), $ _SESSIONS (सत्र), $ _SERVER (सर्वर चर), $ _ENV (पर्यावरण चर) , $ GLOBALS (सब कुछ जोड़ती है)।

इसका क्या मतलब है? नीचे मैं केवल उस स्क्रिप्ट को फिर से लिखूंगा जो मैंने पहले register_globals = Off के लिए प्रदान किया था।

अब कोई समस्या नहीं।
बस, अगर मैं स्पष्ट करूँ कि $ _ ****, नाम ’में, नाम के बजाय, टेक्स्ट फ़ील्ड या कुकीज़ का नाम या पता बार से पारित पैरामीटर लिखें।

उसी अध्याय में मैं निम्नलिखित छोटे उदाहरण पर विचार करना चाहता हूं। फिर, पहले रजिस्टर में सक्षम register_globals के साथ उदाहरण पर विचार करें।

स्क्रिप्ट $ 7. के बराबर $ का मूल्य आउटपुट करेगी। वास्तव में, हमारे पास यह है कि चर फ़ंक्शन के अंदर और बाहर दोनों उपलब्ध हैं। यह अच्छा नहीं है, क्योंकि इस तरह के चर की एक बड़ी स्क्रिप्ट के साथ $ एक बहुत हो सकता है, और इसके परिणामस्वरूप, किसी भी फ़ंक्शन में मूल्य को परिवर्तनशील किया जा सकता है और स्क्रिप्ट का परिणाम अप्रत्याशित होगा।
अब, यदि समान कोड को register_globals = Off के साथ निष्पादित किया जाता है, तो 2. प्रदर्शित किया जाएगा। चूंकि फ़ंक्शन के अंदर $ चर में परिवर्तन से स्क्रिप्ट के मुख्य निकाय में $ चर प्रभावित नहीं होगा। यहां आपको चर के दायरे के बारे में मैनुअल पढ़ना होगा।
अगर हमें यह सात प्राप्त करने की आवश्यकता है, तो हमें फ़ंक्शन से स्थानीय $ का मूल्य वापस करने की आवश्यकता है और इस मूल्य को वैश्विक $ a में सहेजना होगा।

4. वाक्य रचना के मुख्य पहलू। एक शाब्दिक या कोई शाब्दिक ...

1. फिर से, कई नौसिखिए प्रोग्रामर प्रविष्टि के बीच अंतर को नहीं समझते हैं: $ _POST manypole 'और $ _POST _ole। पहला विकल्प वाक्यात्मक रूप से सही है, जबकि दूसरा नहीं है। PHP ध्रुव तत्व को खोजने की कोशिश नहीं करेगा, लेकिन एक ऐसा नाम जिसका नाम पोल स्थिरांक में जमा है, जो आपके पास नहीं है।

कोट्स शाब्दिक अर्थ को दर्शाते हैं, लाइन। यदि आपके पास एक इंडेक्स सरणी है, तो आपको इसमें $ _POST in1 'लिखने की आवश्यकता नहीं है, लेकिन $ _POST।

“और“ में कोई अंतर नहीं है।

2. चर की व्युत्पत्ति अक्सर इस तरह से की जाती है:

इस तरह की स्ट्रिंग दुभाषिया द्वारा "पार्स" की तुलना में बहुत अधिक है

पहला विकल्प सबसे बेहतर है, और संपादन प्रोग्राम कोड के दृष्टिकोण से, यह समझना आसान है कि आपके पास कहां चर है और आपके पास पाठ कहां है।