آشنایی با دستور switch در php

تاریخ: 05 فروردین 1400

دستور switch یک جایگزین مناسب تر برای بعضی if-elseif های طولانی می باشد. این دستور خودش alternative های دیگری نیز دارد که به بعضی از آنها در این مطلب اشاره می کنیم.

ساختار دستور switch case

فرض کنید یک متغیر x داریم و 3 مقدار 1، 2 و 3 نیز داریم. قرار است بررسی کنیم که اگر x برابر هر کدام بود، دستورات مربوط به آن اجرا شود. در اینصورت با استفاده از دستور کنترلی if داریم:

$x = 2;
if( $x==1 )
    echo 1;
elseif( $x==2 )
    echo 2;
elseif( $x==3 )
    echo 3;
//output: 2

 

این کار با استفاده از دستور سوئیچ به راحتی قابل انجام بود:

$x = 2;
switch( $x ) {
    case 1:
        echo 1;
        break;
    case 2:
        echo 2;
        break;
    case 3:
        echo 3;
        break; 
}
//output: 2

 

دستور سوئیچ زمانی استفاده می شود که می خواهیم چک کنیم آیا متغیر ما مقدار خاصی را دارد یا خیر. و در آنصورت دستوری خاص را اعمال نماییم.

switch( $variable ) {
    case 1:
        //statement1
        break;
    case 2:
        //statement2
        break;
    ...
    default:
        //statement3
}

 

دستور switch شامل یک یا چند case می شود که تقریبا مشابه دستور if عمل می کند.

هر case شامل یک مقدار، دستورات مدنظر و یک دستور break می باشد:

دستور سوئیچ به این صورت عمل می کند که ابتدا یک مقدار به دستور سوئیچ می دهیم (variable)

و سپس در هر case چک می کنیم که اگر این مقدار برابر مقدار case بود، دستورات این case اجرا شود و سپس از switch خارج شود.

هر دستور case یک بلاک دارد که شامل زیر است:

$x = 2;
switch($x) {
    case 1:
    //statement
    break;
}
//output: 2

 

عددی که جلوی case می آید، باید چک شود که آیا برابر متغیر x در شرط سوئیچ است یا خیر.

اگر برابر نبود به case بعدی می رود.

اگر برابر بود، دستور داخل case اجرا می شود و سپس با توجه به دستور break از سوئیچ خارج می شود.

نکته: اگر دستور break در case قرار داده نشود، حتی اگر آن case درست هم باشد، باز case بعدی چک می شود:

$x = 2;
switch($x) {
    case 2:
        echo 1;
    case 3:
        echo 2;
}
//output: 23

 

اگر هیچ یک از مقادیر case درست نبود، دستور موجود در default اجرا می شود. (مشابه else در ساختار if)

$x = 4;
switch( $x ) {
    case 1:
        echo 1;
        break;
    case 2:
        echo 2;
        break;
    case 3:
        echo 3;
        break; 
    default:
        echo 'none';
}
//output: none

 

استفاده از clone syntax برای دستور switch نیز مجاز می باشد:

$x = 4;
switch( $x ):
    case 1:
        echo 1;
        break;
    case 2:
        echo 2;
        break;
    case 3:
        echo 3;
        break; 
    default:
        echo 'none';
endswitch;
//output: none

 

تکنیک lookup table به جای switch case

اگر بخواهیم تحت شرط متغیر a، یک مقدار به متغیر b دهیم با استفاده از switch دستور زیر را خواهیم نوشت:

$x = 2;
switch($x){
    case 1:
        $y = 'mohammad';
        break;
    case 2:
        $y = 'ali';
        break;
    case 3:
        $y = 'reza';
        break;
    case 4:
        $y = 'ali';
        break;
    default:
        $y = 'ahmad';
}
echo $y; //output: ali

 

تکنیکی وجود دارد به نام lookup table که بدین صورت است که ما مقدار x و مقادیر شرط را در یک آرایه انجمنی قرار می دهیم و سپس با یک ternary operator مقدار y را ست می کنیم:

$map = [
    1 => 'mohammad',
    2 => 'ali',
    3 => 'reza',
    4 => 'ahmad',
];
$y = isset($map[$x]) ? $map[$x] : 'ahmad';
echo $y; //output: ali

 

البته در این مورد می توانستیم به جای ternary operator از null colescing operator استفاده کنیم:

$y = $map[$x]) ?? 'ahmad';

 

 

 

 

دیدگاهتان را بنویسید

طراحی افزونه وردپرس