Menu
flag Ar iconالعربيةdown icon

الدالة isset() في PHP: التحقق من تعيين متغير أو مفتاح

تعيد isset($var) القيمة true عندما يكون المتغير موجودًا وليس null، وfalse في غير ذلك، دون أي تحذير. وتتحقق أيضًا من مفاتيح المصفوفات وخصائص الكائنات: isset($user['email']). تعلّم isset مع عدة متغيرات، والمفاتيح المتداخلة، وisset مقابل empty، وisset مقابل array_key_exists، والتحقق من إرسال النماذج.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

تعيد isset($var) القيمة true إذا كان المتغير موجودًا وقيمته ليست null. وتعيد false لمتغير غير معرّف، أو محذوف بـ unset، أو يحمل null، ولا تطبع أي تحذير أبدًا.

لا تنظر isset() إلا إلى وجود الشيء. القيمة المعيَّنة لكنها فارغة، مثل 0 أو "" أو []، تعيد true أيضًا. وإذا أردت «معيَّن وغير فارغ»، فاستخدم empty (منفية).

التحقق من وجود مفتاح في مصفوفة باستخدام isset

هنا تُستخدم isset() أكثر ما تُستخدم. قراءة مفتاح غير موجود تطبع Warning: Undefined array key في إعداد PHP عادي، أما فحصه بـ isset() أولًا فلا. وتعمل أيضًا مع المفاتيح المتداخلة، وتتوقف بهدوء عند أول مستوى مفقود.

عندما لا تحتاج إلا إلى القيمة أو قيمة افتراضية، يجري $user["website"] ?? "none" الفحص نفسه في خطوة واحدة. راجع عامل الدمج مع null.

isset مع عدة متغيرات

مرّر عدة وسائط فتعيد isset() القيمة true فقط إذا كانت كلها معيَّنة وليست null. وهي طريقة قصيرة للتحقق من وصول كل الحقول المطلوبة.

isset على النصوص والكائنات

على النص، تتحقق isset($str[5]) من وجود محرف عند الإزاحة 5، وهذا فحص سريع للطول. وعلى الكائن، تتحقق من خاصية، ولصنف ذي بيانات خاصة تستدعي isset() الدالة __isset() إذا عرّفها الصنف.

isset مقابل empty مقابل is_null

اختر قيمة لـ $x في الجدول لتقارن الفحوص الثلاثة والتحويل البسيط (bool). حُسبت كل خلية بواسطة PHP 8.3.

isset وempty وis_null لكل قيمة من قيم $x
Point at or tap a cell to read it as PHP.
$xissetemptyis_nullbool
null
false
0
"0"
""
" "
[]
"a"
1
0.0
"0.0"
Every cell computed by PHP 8.3.19.

القاعدة التي يجب تذكّرها:

  • تكون isset() مساوية لـ false فقط مع null ومع ما لا وجود له.
  • تكون empty() مساوية لـ true مع تلك ومع كل قيمة خاطئة منطقيًا أيضًا: false و0 و0.0 و"" و"0" و[].
  • تعطي is_null() عكس isset() للمتغيرات الموجودة، لكنها تحذّر عندما يكون المتغير غير معرّف. استخدم isset() أو === null بدلًا منها.

التحقق من إرسال نموذج

isset() هي الطريقة الكلاسيكية لمعرفة ما إذا وصل حقل من النموذج. شغّل هذا المثال، واكتب اسمًا واضغط Send: يُنفَّذ السكربت نفسه مرة أخرى مع امتلاء $_POST.

حقل النص الفارغ يُرسَل مع ذلك، بقيمة ""، لذا تكون isset($_POST["name"]) مساوية لـ true بعد أي إرسال. أما مربع الاختيار غير المحدد فلا يُرسَل أصلًا، وهذا يجعل isset() الاختبار الصحيح تمامًا لمربعات الاختيار. ولاشتراط قيمة غير فارغة، تحقق من النص بعد تشذيبه كما يفعل المثال. تبني صفحة النماذج نموذجًا كاملًا مع التحقق.

isset مقابل array_key_exists

يتفقان في كل شيء إلا المفتاح الذي قيمته null. تعامله isset() على أنه مفقود، ولا تفعل array_key_exists() ذلك.

إذا كان «معيَّن إلى null» يعني في بياناتك شيئًا مختلفًا عن «غير مضبوط»، فاستخدم array_key_exists(). وإلا فإن isset() أقصر، وهي بنية لغوية لا استدعاء دالة، لذا فهي أسرع قليلًا أيضًا.

خطأ شائع: isset على تعبير

لا تقبل isset() إلا المتغيرات وعناصر المصفوفات والخصائص. تمرير نتيجة دالة أو ثابت خطأ ترجمة:

<?php
if (isset(trim($input))) {}
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in /home/index.php on line 2

خزّن النتيجة في متغير أولًا، أو اختبر القيمة نفسها: null !== $expr كما تقترح الرسالة، أو trim($input) !== "" للنص.

الأسئلة الشائعة

ماذا تفعل isset() في PHP؟

تعيد isset($x) القيمة true إذا كانت $x موجودة وليست null، وfalse في غير ذلك. ولا تطلق أبدًا تحذيرًا لمتغير أو مفتاح مصفوفة غير معرّف، لذا فهي آمنة مع بيانات الطلب مثل isset($_POST['email']).

ما الفرق بين isset() وempty() في PHP؟

تسأل isset() "هل هذا موجود وليس null"، وتسأل empty() "هل هذا مفقود أو خاطئ منطقيًا". مع 0 و"" و"0" و[]، تعيد isset() القيمة true وتعيد empty() أيضًا true. ومع null أو مفتاح مفقود، تكون isset() مساوية لـ false وempty() مساوية لـ true. و!empty($x) مثل isset($x) && $x حين تكون صحيحة منطقيًا.

هل تستطيع isset() التحقق من عدة متغيرات؟

نعم: تعيد isset($a, $b, $c) القيمة true فقط إذا كان كل واحد منها معيَّنًا وليس null. وتتوقف عند أول واحد غير معيَّن.

هل أستخدم isset() أم array_key_exists()؟

لا يختلفان إلا عندما يكون المفتاح موجودًا بالقيمة null: تعيد isset($arr['k']) القيمة false، وتعيد array_key_exists('k', $arr) القيمة true. استخدم array_key_exists عندما تكون null قيمة مخزّنة ذات معنى، وإلا فإن isset أقصر وأسرع قليلًا.

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن