تعيد empty($var) القيمة true إذا كان المتغير غير موجود أو كانت قيمته خاطئة منطقيًا: null أو false أو 0 أو 0.0 أو "" أو "0" أو مصفوفة فارغة []. ولأي قيمة أخرى تعيد false. ومثل isset()، لا تحذّر أبدًا من المتغيرات أو مفاتيح المصفوفات غير المعرّفة.
empty($x) مثل !isset($x) || !$x. بعبارة أخرى: مفقود، أو يتحول إلى false.
ما القيم الفارغة
اختر قيمة في الجدول لترى empty() بجانب isset() والتحويل (bool). حُسبت كل خلية بواسطة PHP 8.3.
| $x | empty | isset | bool |
|---|---|---|---|
| null | |||
| false | |||
| 0 | |||
| 0.0 | |||
| "" | |||
| "0" | |||
| [] | |||
| " " | |||
| "0.0" | |||
| "a" | |||
| "null" | |||
| [0] | |||
| 1 | |||
| -1 |
المفاجآت في الطرفين: "0" فارغة، بينما " " (مسافة) و"0.0" و"null" و[0] ليست فارغة.
"0" فارغة: الخطأ الكلاسيكي
لأن "0" خاطئة منطقيًا، تعامل empty() الكمية 0 أو الدرجة 0 أو رمز PIN "0" على أنها «لم يُدخل شيء». وهذا يسبب مشكلات في النماذج، حيث تصل كل قيمة كنص.
لمدخلات النص، الفحص الموثوق لعبارة «لم يُدخل شيء» هو trim($value) === "". واحتفظ بـ empty() للقيم التي يعني فيها 0 حقًا لا شيء.
التحقق من أن نصًا فارغ
لاختبار النص الفارغ بدقة، قارن بـ "". ولاعتبار المسافات البيضاء فارغة أيضًا، استخدم trim أولًا. ومنذ PHP 5.5 تقبل empty() التعابير، لذا فإن empty(trim($s)) تعمل أيضًا (لكن مع مشكلة "0" نفسها).
لا تقبل trim() القيمة null دون إشعار إهمال في PHP 8.1 وما بعدها، ولهذا يكتب المثال trim($s ?? "").
التحقق من أن مصفوفة فارغة
في المصفوفات، تعطي empty($arr) و$arr === [] وcount($arr) === 0 الإجابة نفسها. وتتميز empty() بأنها تعمل على متغير أو مفتاح قد لا يكون موجودًا.
تحذف array_filter() دون دالة رد نداء كل قيمة خاطئة منطقيًا، لذا فهي طريقة سريعة لسؤال «هل تحتوي هذه المصفوفة على شيء حقيقي».
التحقق من حقل مطلوب في نموذج
!empty() طريقة شائعة لاشتراط حقل، ما دام 0 ليس إجابة صالحة. شغّل هذا المثال، واترك الحقول فارغة واضغط Send، ثم املأها وأرسل مرة أخرى: يُنفَّذ السكربت مرة أخرى مع امتلاء $_POST.
تغطي empty($_POST["terms"]) الحالتين لمربع الاختيار: لم يُرسَل أصلًا، أو أُرسل بقيمة فارغة. وتذهب صفحة النماذج أبعد من ذلك برسائل خطأ لكل حقل.
empty مقابل isset
كلتاهما آمنة مع المتغيرات والمفاتيح غير المعرّفة. لكنهما تجيبان عن سؤالين مختلفين:
isset($x): هل هو موجود وليسnull؟ استخدمها للمفاتيح الاختيارية ومربعات الاختيار وسؤال «هل أُرسل هذا أصلًا».!empty($x): هل هو موجود وصحيح منطقيًا؟ استخدمها لسؤال «هل فيه شيء حقيقي»، عندما لا يُحتسب0و"0".$x === ""أو$x === []: هل هو فارغ تمامًا؟ استخدمها عندما يكون0قيمة صالحة.
تشرح صفحة isset النصف الآخر، بما في ذلك isset() مع عدة متغيرات دفعة واحدة والفرق عن array_key_exists().
الأسئلة الشائعة
ما القيم التي تعدها empty() فارغة في PHP؟
تكون empty($x) مساوية لـ true عندما تكون $x غير موجودة أو مساوية لـ null أو false أو 0 أو 0.0 أو "" أو "0" أو []. وكل ما عداها ليس فارغًا، بما في ذلك " " (مسافة) و"0.0" و"false" و[0].
لماذا تُعد "0" فارغة في PHP؟
empty() مثل !$x دون التحذير الخاص بالمتغيرات غير المعرّفة، والنص "0" يتحول إلى false. وهذا يجعل empty() غير مناسبة للحقول التي يكون فيها 0 إجابة صالحة، فافحص $x === '' أو trim($x) === '' بدلًا منها.
كيف أتحقق من أن مصفوفة فارغة في PHP؟
كل من empty($arr) و$arr === [] يعمل، وكذلك count($arr) === 0. وتعيد empty() أيضًا true عندما يكون المتغير غير معيَّن، بينما تحذّر count() على متغير غير معرّف ثم تطلق TypeError مع null.
متى أستخدم empty() بدلًا من isset()؟
استخدم isset() عندما تحتاج فقط إلى معرفة أن القيمة موجودة (أُرسل مربع اختيار، أو مفتاح إعدادات موجود). واستخدم !empty() عندما يجب أن تكون القيمة غير فارغة أيضًا، مثل حقل نص مطلوب. واحذر مع الحقول التي يكون فيها 0 صالحًا، لأن empty('0') تساوي true.