تكرار السؤال: …
الإجابة المختصرة
يقارن == القيم بعد محاولة تحويل الأنواع، بينما يقارن === القيمة والنوع معاً دون أي تحويل ضمني.
الشرح
في الإصدارات السابقة لـ PHP، كانت المقارنات الضمنية عبر == تؤدي لكوارث أمنية (مثل 0 == 'admin' كانت تعيد true). في PHP 8 تم تحسين المقارنات بين الأرقام والنصوص لتصبح أكثر حذراً، ولكن القاعدة الذهبية الموصى بها في المقابلات دائماً هي استخدام === في كل مكان لتفادي مفاجآت التحويلات الضمنية.
مثال بالكود
0 === "0"; // false
0 == "0"; // true
false === 0; // falseأخطاء شائعة
- استخدام == لمقارنة كلمات المرور أو الرموز الأمنية مما يتيح ثغرات التخمين والـ Type Juggling.
أسئلة متابعة
- ما الفرق بين Type Juggling وموجه declare(strict_types=1) في PHP؟
- ما الفرق بين عامل Null Coalescing (??) وعامل Nullsafe Operator (?->) في PHP الحديثة؟