टी एल; डॉ
यदि आप string
एक सरणी के रूप में इसे एक्सेस करने का प्रयास कर रहे हैं, तो यह एक कुंजी है string
। string
यह समझ में नहीं आएगा। कोड में हम समस्या देख सकते हैं:
"hello"["hello"];
// PHP Warning: Illegal string offset 'hello' in php shell code on line 1
"hello"[0];
// No errors.
array("hello" => "val")["hello"];
// No errors. This is *probably* what you wanted.
गहराई में
आइए देखते हैं वह त्रुटि:
चेतावनी: अवैध स्ट्रिंग ऑफसेट 'पोर्ट' में ...
यह क्या कहता है? यह कहता है कि हम स्ट्रिंग 'port'
को स्ट्रिंग के लिए ऑफसेट के रूप में उपयोग करने का प्रयास कर रहे हैं । ऐशे ही:
$a_string = "string";
// This is ok:
echo $a_string[0]; // s
echo $a_string[1]; // t
echo $a_string[2]; // r
// ...
// !! Not good:
echo $a_string['port'];
// !! Warning: Illegal string offset 'port' in ...
इसका क्या कारण है?
किसी कारण के लिए आप एक की उम्मीद है array
, लेकिन आप एक है string
। सिर्फ एक मिक्स-अप। शायद आपका चर बदल गया था, शायद यह कभी नहीं था array
, यह वास्तव में महत्वपूर्ण नहीं है।
क्या किया जा सकता है?
अगर हमें पता है कि हमारे पास एक होना चाहिए array
, तो हमें यह निर्धारित करने के लिए कुछ बुनियादी डिबगिंग करनी चाहिए कि हमारे पास ए क्यों नहीं है array
। अगर हमें नहीं पता कि हमारे पास एक है array
या नहीं string
, तो चीजें थोड़ी पेचीदा हो जाएंगी।
हम जो कर सकते हैं वह यह सुनिश्चित करने के लिए सभी प्रकार की जाँच है कि हमारे पास नोटिस और चेतावनियाँ नहीं हैं is_array
और isset
या जैसी चीज़ों के साथ array_key_exists
:
$a_string = "string";
$an_array = array('port' => 'the_port');
if (is_array($a_string) && isset($a_string['port'])) {
// No problem, we'll never get here.
echo $a_string['port'];
}
if (is_array($an_array) && isset($an_array['port'])) {
// Ok!
echo $an_array['port']; // the_port
}
if (is_array($an_array) && isset($an_array['unset_key'])) {
// No problem again, we won't enter.
echo $an_array['unset_key'];
}
// Similar, but with array_key_exists
if (is_array($an_array) && array_key_exists('port', $an_array)) {
// Ok!
echo $an_array['port']; // the_port
}
के बीच कुछ सूक्ष्म अंतर हैं isset
और array_key_exists
। उदाहरण के लिए, यदि मान $array['key']
है null
, तो isset
रिटर्न false
। array_key_exists
बस जाँचेंगे कि, ठीक है, कुंजी मौजूद है ।
$memcachedConfig
है वह सरणी नहीं है। शोvar_dump($memcachedConfig);