المساواة والتطابق
جزء من قسم Fundamentals في رحلة PHP على Coddy — الدرس 24 من 71.
توفر PHP طريقتين للتحقق مما إذا كانت القيم متساوية: معامل المساواة (==) و معامل التطابق (===). فهم الفرق أمر بالغ الأهمية لكتابة كود موثوق.
عامل التساوي (==) يقارن القيم بعد تحويلها إلى نفس النوع. يُسمى هذا بـ "المقارنة غير الصارمة" (loose comparison):
<?php
var_dump(5 == "5"); // bool(true) - تم تحويل السلسلة النصية إلى رقم
var_dump(0 == false); // bool(true) - كلاهما يصبح 0
var_dump(1 == true); // bool(true) - كلاهما يصبح 1
?>يقارن عامل التطابق (===) كلاً من القيمة والنوع. لا يحدث أي تحويل، لذا يجب أن يتطابق كلاهما تماماً:
<?php
var_dump(5 === "5"); // bool(false) - عدد صحيح مقابل سلسلة نصية
var_dump(5 === 5); // bool(true) - نفس النوع والقيمة
var_dump(0 === false); // bool(false) - عدد صحيح مقابل قيمة منطقية
?>للمقارنات "غير المتساوية"، استخدم != (غير صارمة) أو !== (صارمة):
<?php
var_dump(5 != "5"); // bool(false) - القيم متساوية
var_dump(5 !== "5"); // bool(true) - الأنواع تختلف
?>كأفضل ممارسة، فضل استخدام === و !== لتجنب مفاجآت تحويل الأنواع غير المتوقعة.
التحدي
سهلاقرأ قيمتين من المدخلات: رقم (كسلسلة نصية) وعدد صحيح.
استخدم عاملي المساواة والتطابق لتقييم المقارنات التالية واطبع نتيجة كل منها باستخدام var_dump()، كل واحدة في سطر جديد:
- تحقق مما إذا كانت قيمة السلسلة النصية تساوي العدد الصحيح باستخدام المقارنة غير الصارمة (
==) - تحقق مما إذا كانت قيمة السلسلة النصية تساوي العدد الصحيح باستخدام المقارنة الصارمة (
===) - تحقق مما إذا كانت قيمة السلسلة النصية لا تساوي العدد الصحيح باستخدام المقارنة غير الصارمة (
!=) - تحقق مما إذا كانت قيمة السلسلة النصية لا تساوي العدد الصحيح باستخدام المقارنة الصارمة (
!==)
ملاحظة: احتفظ بالقيمة الأولى كسلسلة نصية (لا تقم بتحويل نوعها). قم بتحويل القيمة الثانية إلى عدد صحيح.
مثال:
إذا كانت المدخلات هي 42 و 42، يجب أن تكون المخرجات:
bool(true)
bool(false)
bool(false)
bool(true)الشرح:
"42" == 42هو true (القيم متساوية بعد تحويل النوع)"42" === 42هو false (سلسلة نصية مقابل عدد صحيح - أنواع مختلفة)"42" != 42هو false (القيم متساوية)"42" !== 42هو true (الأنواع مختلفة)
ورقة مرجعية
لدى PHP طريقتان لمقارنة القيم:
عامل المساواة (==) - مقارنة مرنة تقوم بتحويل القيم إلى نفس النوع قبل المقارنة:
<?php
var_dump(5 == "5"); // bool(true) - تم تحويل السلسلة النصية إلى رقم
var_dump(0 == false); // bool(true) - كلاهما يصبح 0
var_dump(1 == true); // bool(true) - كلاهما يصبح 1
?>عامل التطابق (===) - مقارنة صارمة تتحقق من القيمة والنوع معاً:
<?php
var_dump(5 === "5"); // bool(false) - عدد صحيح مقابل سلسلة نصية
var_dump(5 === 5); // bool(true) - نفس النوع والقيمة
var_dump(0 === false); // bool(false) - عدد صحيح مقابل قيمة منطقية
?>عوامل عدم المساواة:
<?php
var_dump(5 != "5"); // bool(false) - القيم متساوية (مقارنة مرنة)
var_dump(5 !== "5"); // bool(true) - الأنواع مختلفة (مقارنة صارمة)
?>أفضل ممارسة: استخدم === و !== لتجنب تحويل الأنواع غير المتوقع.
جرّب بنفسك
<?php
// قراءة المدخلات
$stringValue = trim(fgets(STDIN));
$intValue = intval(trim(fgets(STDIN)));
// TODO: اكتب كودك أدناه
// استخدم var_dump() لطباعة نتيجة كل مقارنة في سطر جديد:
// 1. المساواة غير الصارمة (==)
// 2. المساواة الصارمة (===)
// 3. عدم المساواة غير الصارمة (!=)
// 4. عدم المساواة الصارمة (!==)
?>يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Fundamentals
4معاملات المقارنة والمنطق
معاملات المقارنةالمساواة والتطابقالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيمراجعة - المنطق البسيط2المتغيرات وأنواع البيانات
الأرقامالنصوص وعلامات الاقتباسالقيم المنطقية (Booleans)قواعد التسميةملخص - تهيئة المتغيراتالمتغيرات الفارغةدمج النصوصاستقبال مدخلات المستخدمتحويل أنواع البيانات5المنطق الشرطي
جملة Ifجملة If - Elseالعامل الثلاثي (Ternary Operator)عامل Null Coalescingجملة Switchمراجعة - اتخاذ القرارات3المعاملات الأساسية
المعاملات الحسابيةمعامل باقي القسمةمعامل الأسالتعيين المركبالزيادة والنقصانأسبقية المعاملاتمراجعة - الحسابات البسيطةمعاملات النصوص