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

الدالة empty() في PHP: فحص النصوص والمصفوفات الفارغة و0

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

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

تعيد empty($var) القيمة true إذا كان المتغير غير موجود أو كانت قيمته خاطئة منطقيًا: null أو false أو 0 أو 0.0 أو "" أو "0" أو مصفوفة فارغة []. ولأي قيمة أخرى تعيد false. ومثل isset()، لا تحذّر أبدًا من المتغيرات أو مفاتيح المصفوفات غير المعرّفة.

empty($x) مثل !isset($x) || !$x. بعبارة أخرى: مفقود، أو يتحول إلى false.

ما القيم الفارغة

اختر قيمة في الجدول لترى empty() بجانب isset() والتحويل (bool). حُسبت كل خلية بواسطة PHP 8.3.

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

المفاجآت في الطرفين: "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.

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

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

ابدأ الآن