💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ علیرضا تنکابنی
تفاوت بین ?? و :? و یک مثال کاربردی
جامعه پی اچ پی ایجاد شده در ۱۲ مرداد ۱۴۰۲

قسمت اول : توضیح علامت ??

بصورت خیلی خلاصه باید بگویم علامت ?? ، وجود داشتن و تهی نبودن را چک می‌کند. (ولی علامت :? غلط بودن را بررسی می‌کند که در قسمت دوم توضیح می‌دهم)

به عنوان مثال به کد زیر دقت کنید :

$result = $a ?? $b ;

این کد چک می‌کند که آیا پارامتر a$ وجود دارد و آیا مقداری برای آن ست شده است؟ اگر "بله" پس مقدار a$ را در result$ قرار می‌دهد، در غیر این صورت مقدار b$ در result$ گذاشته می‌شود. پس کد بالا دقیقاً معادل کد زیر است :

if ( isset($a) && !is_null($a) ) {
    $result = $a ;
} else {
    $result = $b ;
}

قسمت دوم : توضیح علامت :?

همانطور که در بالا گفتم، علامت :? غلط بودن را بررسی می‌کند. به عنوان مثال به کد زیر دقت کنید :

$result = $a ?: $b ;

مفهوم کد بالا این است که آیا پارامتر a$ صحیح (TRUE) است؟ اگر "بله" پس مقدار a$ را در result$ قرار می‌دهد، در غیر این صورت اگر مقدار a$ غلط (FALSE) باشد، مقدار b$ در result$ قرار داده می‌شود. پس کد بالا را به شکل زیر می‌توان نوشت :

if ($a) {
    $result = $a ;
} else {
    $result = $b ;
}

ضمن اینکه قبلاً یاد گرفته بودیم کد بالا را در یک خط به این شکل نیز بنویسیم :

$result = $a ? $a : $b ;

قسمت سوم : نکته کاربردی

از عملگرهای ?? و :? که به آنها Null-Condition و False-Condition نیز می‌گویند، می‌توانیم به صورت ترکیبی استفاده کنیم. به عنوان مثال، به کد زیر دقت کنید :

$action = $_GET['action'] ?? $_SESSION['action'] ?? $_COOKIE['action'] ?? 'Error : The Action is not set !!!' ;

مفهوم کد بالا بصورت خلاصه چنین است که اگر پارامتر action در URL یا سشن یا کوکی مقداردهی نشده باشد، خطا بر می‌گرداند.

بسیار عالی ، متشکر از شما

منصور لیاقت ۲۱ تیر ۱۴۰۳، ۲۲:۰۵