خیلیها ()isset رو فقط برای این استفاده میکنن:
if (isset($user)) {
// ...
}اما یه رفتار مهم داره که توی پروژههای واقعی میتونه باعث باگ بشه:
$data = [
'name' => null
];
var_dump(isset($data['name']));
// false
چرا؟
چون ()isset در PHP فقط بررسی نمیکنه که کلید وجود داره؛ بررسی میکنه که مقدار وجود داشته باشه و null نباشه.
پس این دو حالت از نظر ()isset یکی هستن:
$data = [];
$data = [
'name' => null
];
هر دو:
isset($data['name']); // false
اگر واقعاً میخوای بفهمی کلید وجود داره یا نه، از ()array_key_exists استفاده کن:
$data = [
'name' => null
];
var_dump(array_key_exists('name', $data));
// true
چرا این موضوع مهمه؟ 👇
فرض کن API بهت این response رو بده:
{
"name": null
}اینجا null ممکنه یک مقدار کاملاً معنادار باشه؛ مثلاً یعنی کاربر عمداً نامش رو حذف کرده.
ولی اگر اینطوری بنویسی:
if (!isset($data['name'])) {
// name doesn't exist
}داری دو مفهوم متفاوت رو یکی در نظر میگیری:
❌ کلید وجود ندارد
❌ کلید وجود دارد ولی مقدارش null است
در پروژههای جدی، این تفاوت میتونه روی Validation، API، PATCH Request و Update Logic تأثیر مستقیم بذاره.
🔑 قاعده حرفهای:
isset() → آیا مقدار وجود دارد و null نیست؟
array_key_exists() → آیا این کلید واقعاً داخل آرایه وجود دارد؟
همین تفاوتهای کوچک، دقیقاً جایی هستن که کد معمولی رو از کد حرفهای جدا میکنن.
@CodeVerse_dev