2012-11-29 17 views
6

मैंने मौजूदा PHP स्रोत, में इस घटना के बिना एस्ट्रोफ़े के बिना फ़ील्ड एक्सेस के साथ एक घटना को खारिज कर दिया: $ _GET [test]।उद्धरण के बिना PHP ऐरे का उपयोग

मैं, अनिश्चित भी पता नहीं है मिल गया है कि यह एक संभव तरीका है, तो मैं एक छोटी उदाहरण के परीक्षण के लिए लिखा है:

echo "Array Test, fields without apostrophe, like \$_GET[fieldname]<BR><BR>"; 
$a = array(); 
$a['test'] = "ArrayValue"; 
echo "case 1 -> \$a['test']: " . $a['test'] . "<BR>"; 
echo "case 2 -> \$a[\"test\"]: " . $a["test"] . "<BR>"; 
echo "case 3 -> \$a[test]: " . $a[test] . "<BR>"; 

और यह काम करता है, हर परिणाम मूल्य मिल गया (ArrayValue) ।

मैं पसंद मामले की तरह अभिगम विधि 2.

मामले 3 php में एक सामान्य, अनुमति कोडन शैली है?

+1

मुझे अपरिभाषित स्थिरांक का उपयोग करते समय चेतावनी मिल रही है, और इसे स्ट्रिंग के रूप में माना जाता है। लेकिन नहीं, यह "कोडिंग शैली की अनुमति नहीं है"। –

+0

आपके उत्तर के लिए धन्यवाद! मैंने अपाचे लॉग की जांच की है, जो एक चेतावनी नहीं फेंकता है (php.ini: error_reporting = E_ALL और ~ E_DEPRECATED; phpinfo: 22527)। सुनकर खुशी हुई, कि यह एक अच्छी शैली नहीं है! – Peter

उत्तर

7

यहां क्या होता है, यह है कि PHP a constant को test कहा जाता है। यदि निरंतर परिभाषित किया गया है, मान वापस कर दिया गया है, यह परिभाषित नहीं किया गया है, PHP स्ट्रिंग "test" पर वापस आ जाता है। उदाहरण के लिए:

$array = array("A" => "Foo", "B" => "Bar", "C" => "Baz") 
define("B", "C"); 

echo $array[A]; // The constant "A" is undefined, 
        // so PHP falls back to the string "A", 
        // which has the value "Foo". 
echo $array["B"]; // The result is "Bar". 
echo $array[B]; // The value of constant "B" is the string "C". 
        // The result is "Baz". 

यह पीछे की संगतता के लिए है और आपको इसका कभी भी उपयोग नहीं करना चाहिए। यदि आप turn on notices देखेंगे, तो आप देखेंगे कि PHP इसके बारे में शिकायत करता है।

4

यदि आप उद्धरण में कुंजी नहीं डालते हैं, तो इसे एक अपरिभाषित निरंतर (माना जाता है कि इसे कहीं भी परिभाषित नहीं किया गया है) के रूप में संभाला जाएगा, जो अब के लिए काम कर सकता है, लेकिन भविष्य के PHP संस्करणों में विफल हो सकता है। क्योंकि यह सिर्फ गलत है और PHP दस्तावेज़ इस संस्करण को गलत मानता है। 'Arrays do's and don'ts' देखें।

वैसे: यदि आप कुंजी को डबल कोट्स में डालते हैं, तो यह कुंजी-नाम के अंदर चर को प्रस्तुत करता है।

1

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

कारण यह काम करता है कि यह इस रूप में मुख्य रूप को स्थिर रूप में देखता है। जब PHP अज्ञात स्थिरता को देखता है, तो यह स्थिर के नाम पर स्थिर के रूप में डिफ़ॉल्ट होता है, इसलिए यह एक स्ट्रिंग प्रतिस्थापन के रूप में कार्य करता है।

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

इन कारणों से, इस विधि का उपयोग करने की अनुशंसा नहीं की जाती है।

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

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

  • कोई संबंधित समस्या नहीं^_^