আগ্রহীদের জন্য, আমি এই বিষয়টিকে একটি ছোট্ট নিবন্ধে প্রসারিত করেছি, যা নীচে আরও কিছুটা আরও ভাল কাঠামোগত আকারে তথ্য সরবরাহ করে: পিএইচপি'র আইসেটের জন্য সংজ্ঞাবহ গাইড এবং খালি
আইএমএইচও আপনার কেবলমাত্র অ্যাপ্লিকেশনটিকে "E_NOTICE সামঞ্জস্যপূর্ণ" না করে পুরো বিষয়টি পুনর্গঠন করার কথা ভাবা উচিত। রয়ে শত শত আপনার কোড পয়েন্ট যে নিয়মিতভাবে বরং একটি খারাপভাবে গঠিত প্রোগ্রামের মত অবর্তমান ভেরিয়েবল শব্দসমূহ ব্যবহারের চেষ্টা করে। অস্তিত্বহীন ভেরিয়েবলগুলি অ্যাক্সেস করার চেষ্টা কখনই হওয়া উচিত নয়, অন্যান্য ভাষাগুলি সংকলনের সময় এগুলি দেখে। পিএইচপি আপনাকে এটি করার অনুমতি দেয় তা এই নয় যে আপনার উচিত।
এই সতর্কতাগুলি আপনাকে সাহায্য করার জন্য , আপনাকে বিরক্ত করার জন্য নয়। যদি আপনি একটি সতর্কতা পান তবে "আপনি এমন কিছু নিয়ে কাজ করার চেষ্টা করছেন যা বিদ্যমান নেই!" , আপনার প্রতিক্রিয়া হওয়া উচিত "ওফস, আমার খারাপ, আমাকে সেই ASAP ঠিক করতে দিন"। আপনি কীভাবে "ভেরিয়েবলগুলি কেবলমাত্র সূক্ষ্ম অপরিজ্ঞাত কাজ করে" এবং সত্যতার সাথে ভুল কোডের মধ্যে পার্থক্য বলতে যা গুরুতর ত্রুটি হতে পারে ? এই কারণেই আপনি সর্বদা, সর্বদা , ত্রুটি প্রতিবেদনটি 11 এ পরিণত হওয়ার সাথে বিকাশ করেন এবং একক না হওয়া পর্যন্ত আপনার কোডে প্লাগিং চালিয়ে যান reasonNOTICE
জারি করা হয়. ত্রুটি প্রতিবেদন বন্ধ করে দেওয়া কেবলমাত্র উত্পাদন পরিবেশের জন্য, তথ্য ফাঁস এড়াতে এবং বগি কোডের মুখেও আরও ভাল ব্যবহারকারীর অভিজ্ঞতা সরবরাহ করার জন্য।
সম্প্রসারিত:
আপনার কোডটি সর্বদা আপনার প্রয়োজন হবে না isset
বা empty
কোথাও কোথাও, তাদের উপস্থিতি হ্রাস করার একমাত্র উপায় হ'ল আপনার ভেরিয়েবলগুলি সঠিকভাবে আরম্ভ করা। পরিস্থিতির উপর নির্ভর করে এটি করার বিভিন্ন উপায় রয়েছে:
ফাংশন যুক্তি:
function foo ($bar, $baz = null) { ... }
কিনা তা যাচাই করতে দরকার নেই $bar
বা $baz
ফাংশন ভিতরে নির্ধারণ করা হয় কারণ আপনার শুধু তাদের সেট, সব আপনি চিন্তা করতে হবে সম্পর্কে যদি তাদের মান মূল্যায়ন হয় true
বা false
(অথবা যাই হোক না কেন অন্য)।
নিয়মিত ভেরিয়েবলগুলি যে কোনও জায়গায়:
$foo = null;
$bar = $baz = 'default value';
আপনার ভেরিয়েবলগুলি কোডের একটি ব্লকের শীর্ষে চালু করুন যাতে আপনি সেগুলি ব্যবহার করতে চলেছেন। এটি সমস্যার সমাধান !isset
করে, আপনার ভেরিয়েবলের সর্বদা একটি পরিচিত ডিফল্ট মান থাকে তা নিশ্চিত করে, নিম্নলিখিত কোডটি কী কাজ করবে তা পাঠককে ধারণা দেয় এবং এর ফলে স্বতন্ত্র-ডকুমেন্টেশনের জন্যও কাজ করে।
অ্যারে:
$defaults = array('foo' => false, 'bar' => true, 'baz' => 'default value');
$values = array_merge($defaults, $incoming_array);
উপরের মত একই জিনিসটি, আপনি ডিফল্ট মানগুলির সাথে অ্যারের সূচনা করছেন এবং তাদেরকে সত্যিকারের মান দিয়ে ওভাররাইট করছেন।
বাকি ক্ষেত্রে, একটি টেমপ্লেট বলুন যেখানে আপনি মানগুলি আউটপুট করছেন যা নিয়ামক দ্বারা সেট করা হতে পারে বা নাও হতে পারে, আপনাকে কেবল এটি পরীক্ষা করতে হবে:
<table>
<?php if (!empty($foo) && is_array($foo)) : ?>
<?php foreach ($foo as $bar) : ?>
<tr>...</tr>
<?php endforeach; ?>
<?php else : ?>
<tr><td>No Foo!</td></tr>
<?php endif; ?>
</table>
আপনি যদি নিজেকে নিয়মিত ব্যবহার করে দেখতে পান তবে আপনি এটি array_key_exists
কী ব্যবহার করছেন তা মূল্যায়ন করা উচিত। কেবলমাত্র একবারে এখানে পার্থক্য রয়েছে:
$array = array('key' => null);
isset($array['key']);
array_key_exists('key', $array);
যদিও উপরে উল্লিখিত হয়েছে, আপনি যদি সঠিকভাবে আপনার ভেরিয়েবলগুলি আরম্ভ করছেন, আপনার কীটি উপস্থিত আছে কিনা তা খতিয়ে দেখার দরকার নেই, কারণ আপনি জানেন যে এটি রয়েছে। যদি আপনি একটি বাহ্যিক উত্স থেকে অ্যারের পেয়ে থাকেন, মান সম্ভবত হবে না null
কিন্তু ''
, 0
, '0'
, false
অথবা এটি ভালো কিছু, অর্থাত্ একটি মান আপনার সাথে মূল্যায়ন করতে পারেন isset
বা empty
আপনার অভিপ্রায় উপর নির্ভর করে। আপনি যদি নিয়মিতভাবে একটি অ্যারে কী সেট করে থাকেন null
এবং এটির অর্থ বোঝাতে চান তবে false
, উদাহরণস্বরূপ যদি উপরের উদাহরণে পৃথক ফলাফলের ফলাফল isset
এবং array_key_exists
আপনার প্রোগ্রামের যুক্তিতে কোনও পার্থক্য তৈরি হয় তবে আপনাকে নিজের কারণ জিজ্ঞাসা করা উচিত। ভেরিয়েবলের নিছক অস্তিত্ব গুরুত্বপূর্ণ হওয়া উচিত নয়, কেবল তার মানটিই ফলস্বরূপ হওয়া উচিত। কীটি যদি একটি true
/ false
পতাকা হয়, তবে ব্যবহার করুনtrue
বা false
, না null
। এটির ব্যতিক্রম কেবলমাত্র তৃতীয় পক্ষের লাইব্রেরি হবে যা null
কিছু বোঝাতে চায় তবে null
পিএইচপি-তে সনাক্ত করা এত কঠিন যে আমি এখনও এটি করে এমন কোনও লাইব্রেরি খুঁজে পাইনি।