🔥 ۴۰ درصد تخفیف ثبت‌نام دوره‌ها قبل از افزایش قیمت‌ها
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ گوهر مجاهد
آیا match فقط برای متغیر‌های رشته ای مناسب هست؟
جامعه پی اچ پی ایجاد شده در ۰۴ فروردین ۱۴۰۵

سلام

آیا match فقط برای متغیر‌های رشته ای مناسب هست؟ مثلاً می‌خوام متغیر رو با اپراتور کوچکتر یا بزرگتر در match  تعریف کنم:


$situation = match ($mony) {
     $mony < 100  => 'Warning! You are in a bad spot.',
    $mony > 100 => 'It is all good!',
    default => 'Your situation cannot be assessed!',
};

ولی نتیجه ای نمی‌گیرم. علت چی هست؟

خیر، match در PHP فقط برای مقایسه‌های دقیق (strict equality با ===) طراحی شده و نمی‌تواند شرط‌های مقایسه‌ای مثل < یا > را مستقیماً بپذیرد.

کد شما خطا می‌دهد چون match انتظار مقادیر ثابت دارد، نه عبارت‌های boolean.

 

کد اصلاح شده:

$situation = match (true) {
    $money < 100  => 'Warning! You are in a bad spot.',
    $money >= 100 => 'It is all good!',
    default => 'Your situation cannot be assessed!',
};

یا استفاده از if-else

$situation = $money < 100 
    ? 'Warning! You are in a bad spot.' 
    : ($money > 100 ? 'It is all good!' : 'Your situation cannot be assessed!');

روش اول (match(true)) معمولاً خواناتر است وقتی چند شرط مقایسه‌ای دارید.

استاد تیبا همت ۰۹ اردیبهشت ۱۴۰۵، ۰۶:۳۸