
تم إصدار PHP 8 في 26 نوفمبر 2020. حيث تم إضافة العديد من الميزات الجديدة والتحسينات في الأداء.
كان من ضمن
الإضافات تعبير match الشرطي.
ماذا تعرف عن match ؟
match هو تعبير شرطي منطقي شبيه بجملة الشرط المتعدد switch . حيث يتم في match فحص الشرط وإرجاع الناتج وإذا لم يطابق الشرط أحد القيم الموجودة يعيد قيمة افتراضية يتم تحديدها مسبقاً.
مثال
$result = match($select) { 0 => "user", 1 => "admin", 2,3,4 => "super admin", default => 'guest', };
مالفرق بين match و switch ؟
- تسمى match (تعبير شرطي). اي ان الناتج منه يمكن اسناده الى متغير او طباعته او ما إلى ذلك .
- بينما switch (عبارة شرط) لا تعيد الناتج مباشرة وفيها جمل وتعبيرات تنتهي ب (;) ويتم انهاء كل جزء فيها
بعبارات التوقف مثل break.-
مما يعني أن match أقصر .
- في match يتم استخدام الفحص الصارم للقيم، مما يعني
فحص النوع بالإضافة إلى القيمة وكأننا نقارن باستخدام التكافؤ (===) . فالقيمة '1' لا تساوي ١ لان الأول نص
والثاني رقم. لذا فناتج التعبير لن يتطابق إذا لم تتطابق أنواع البيانات.
بينما في switch لا يهم نوع البيانات
فكأننا نقوم بالمقارنة باستخدام (==) وهنا 1='١' يعيد true .
- في match يمكننا الفصل بين القيم باستخدام
الفاصلة (,) كما المثال 300, 200 وهنا اذا تطابقت احداهما فسوف يتحقق الشرط (تكتب في سطر واحد). بينما في
switch نستخدم case ويمكن وجود عدة حالات متتالية في حال اردنا ارجاع نفس الناتج مع ضرورة
استخدام break ,بين الحالات المختلفة أو ما يوازيها .
- اذا لم نقم بكتابة default في
match ولم يتطابق التعبير سيتم رمي استثناء من نوع UnhandledMatchError. بينما في switch لن يحدث شيء.
- يمكن أن
يتم رمي استثناء في بنية match مباشرة . مثال :
$message = match ($statusCode) { 200 => null, 500 => throw new ServerError(), default => 'unknown status code', };
استخدام match , switch ؟
يعود تفضيل استخدام إحد التعبيرين إلى المبرمج، ولكن هناك
حالتين اعتقد انهما يمكن أن يؤخذا بعين الإعتبار عن كتابة الكود :
- إذا أردنا إعادة ناتج الشرط، والفحص الصارم ،
فالطبع يفضل استخدام match.
- في الجمل متعددة الأسطر استخدام switch أكثر عملية.
للمزيد من الأمثلة عن
match واستخداماتها هذا رابط التوثيق الرسمي