قسمت اول : توضیح علامت ??
بصورت خیلی خلاصه باید بگویم علامت ?? ، وجود داشتن و تهی نبودن را چک میکند. (ولی علامت :? غلط بودن را بررسی میکند که در قسمت دوم توضیح میدهم)
به عنوان مثال به کد زیر دقت کنید :
$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 یا سشن یا کوکی مقداردهی نشده باشد، خطا بر میگرداند.