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

عوامل المقارنة في PHP: == مقابل === و<=>

تقارن PHP القيم بـ == (متساويتان بعد تحويل الأنواع)، و=== (القيمة نفسها والنوع نفسه)، و!= و!==، و< > <= >= وعامل المركبة الفضائية <=>. تعرّف على متى تحوّل == الأنواع، وما الذي تغيّر في PHP 8، وشاهد كل مقارنة مرنة وصارمة في جدول واحد.

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

تتحقق == مما إذا كانت قيمتان متساويتين بعد أن تحوّلهما PHP إلى نوع مشترك. وتتحقق === من أنهما متساويتان ومن النوع نفسه. لذا فإن 1 == "1" تساوي true، بينما 1 === "1" تساوي false.

معظم أخطاء المقارنات تأتي من تحويل == لشيء لم تتوقعه. والاختيار الافتراضي الجيد هو === و!==، والانتقال إلى == فقط عندما تعرف أنك تريد التحويل.

كل عوامل المقارنة في PHP

العاملالاسمصحيح عندما
$a == $bيساويمتساويتان بعد تحويل الأنواع
$a === $bمطابقمتساويتان ومن النوع نفسه
$a != $b, $a <> $bلا يساويغير متساويتين بعد تحويل الأنواع
$a !== $bغير مطابقغير متساويتين، أو من نوعين مختلفين
$a < $b, $a > $bأصغر من، أكبر من
$a <= $b, $a >= $bأصغر من أو يساوي، أكبر من أو يساوي
$a <=> $bالمركبة الفضائيةيعيد -1 أو 0 أو 1

جدول المقارنة المرنة والصارمة

حُسبت كل خلية في هذا الجدول بواسطة PHP 8.3. بدّل بين == و=== وانقر خلية لترى التعبير. شبكة == مليئة بالمفاجآت في صفوف null و"" و"0" و[]، أما شبكة === فليست إلا قطرها.

المقارنة المرنة (==) والصارمة (===)
Point at or tap a cell to read it as PHP.
$a == $btruefalse10-1"1""0"""null[]"php""10""1e1"
true
false
1
0
-1
"1"
"0"
""
null
[]
"php"
"10"
"1e1"
Every cell computed by PHP 8.3.19.

كيف تقارن == بين أنواع مختلفة

القواعد التي تتبعها PHP 8، بترتيب أهميتها في الممارسة:

  1. نصان رقميان يُقارنان كعددين: "10" == "1e1" و"1" == "01" كلتاهما true.
  2. عدد ونص رقمي: يصبح النص عددًا. 100 == "1e2" تساوي true.
  3. عدد ونص غير رقمي: منذ PHP 8، يصبح العدد نصًا ويُقارنان كنصين. 0 == "a" تساوي false (كانت true في PHP 7).
  4. أي شيء وقيمة منطقية: يُحوَّل الطرفان إلى bool. "a" == true و[] == false تساويان true.
  5. null ونص: تصبح null النص ""، لذا فإن null == "" تساوي true لكن null == "0" تساوي false. ومع أي نوع آخر، تُقارن null على أنها false.
  6. مصفوفتان: متساويتان عندما تحتويان على أزواج المفتاح/القيمة نفسها.

يوضح السطر الأخير لماذا نادرًا ما تكون مقارنات الترتيب مع null ذات معنى: تصبح null القيمة false، وتصبح -1 القيمة true، وfalse < true.

عدم المساواة: != مقابل !==

!= و<> العامل نفسه. و!== هي النسخة الصارمة. ويهم الفرق أكثر مع الدوال التي تعيد 0 أو false، مثل strpos:

0 != false تساوي false لأن 0 يتحول إلى false. و0 !== false تساوي true لأن العدد الصحيح ليس قيمة منطقية. والفخ نفسه ينطبق على array_search وعلى in_array دون خيارها الصارم.

مقارنة النصوص

تقارن < و> النصوص بايتًا بايتًا (أبجديًا للنصوص اللاتينية البسيطة). وإذا كان النصان رقميين، فيُقارنان كعددين. وللمقارنة غير الحساسة لحالة الأحرف أو بالترتيب «الطبيعي» استخدم الدوال:

عامل المركبة الفضائية <=>

يعيد $a <=> $b القيمة -1 عندما تكون $a أصغر، و0 عندما تتساويان، و1 عندما تكون $a أكبر. ويستخدم قواعد < و== نفسها، وهو أقصر طريقة لكتابة دالة ترتيب.

مقارنة مصفوفتين بـ <=> تقارنهما عنصرًا عنصرًا، وبهذه الطريقة ترتب الدالة حسب العمر أولًا ثم الاسم. والمزيد من وصفات الترتيب في صفحة ترتيب المصفوفات.

خطأ شائع: مقارنة الأعداد العشرية بـ ==

تُخزَّن الأعداد العشرية بالنظام الثنائي، لذا فكثير من القيم العشرية تقريبية. 0.1 + 0.2 لا تساوي 0.3 بالضبط، و== ترى الفرق.

للمبالغ المالية، خزّن السنتات الكاملة كأعداد صحيحة وقارنها بـ ===.

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

ما الفرق بين == و=== في PHP؟

تحوّل == الطرفين إلى نوع مشترك ثم تقارن، لذا فإن 1 == "1" تساوي true. أما === فلا تكون صحيحة إلا عندما تتساوى القيمتان ويكون نوعهما واحدًا، لذا فإن 1 === "1" تساوي false. استخدم === ما لم ترد التحويل.

هل 0 == "a" صحيحة في PHP؟

ليس منذ PHP 8. عند مقارنة عدد بنص غير رقمي، تقارنهما PHP 8 كنصين، لذا فإن 0 == "a" تساوي false. وفي PHP 7 كان النص يُحوَّل إلى 0 وكانت النتيجة true.

ما الفرق بين != و!== في PHP؟

!= (واسمها البديل <>) عكس ==: تكون خاطئة عندما تتساوى القيمتان بعد تحويل الأنواع. و!== عكس ===: تكون صحيحة عندما تختلف القيمتان أو يختلف نوعاهما، لذا فإن 0 !== false تساوي true بينما 0 != false تساوي false.

كيف أقارن عددين عشريين في PHP؟

لا تستخدم == على نتائج الحساب بالأعداد العشرية: 0.1 + 0.2 == 0.3 تساوي false. قارن الفرق بهامش صغير بدلًا من ذلك: abs($a - $b) < PHP_FLOAT_EPSILON، أو قرّب الاثنين إلى الدقة التي تهمك.

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

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

ابدأ الآن