টি এল; ডিআর
আপনি এটি ব্যবহার করার চেষ্টা করছেন 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);