در استفاده از match مقادیر را بر اساس === مقایسه میکند، در حالی که switch از مقایسه == استفاده میکند. این به این معناست که match دقیقتر است و تبدیلهای خودکار نوع را انجام نمیدهد.
هر شاخه در match میتواند مستقیماً یک مقدار را برگرداند و نیازی به استفاده از return یا break نیست.
مثال:
$statusCode = 404;
$result = match ($statusCode) {
200, 201 => "OK",
301, 302 => "Redirect",
404 => "Not Found",
500 => "Server Error",
default => "Unknown status code"
};
echo $result; // Outputs: Not Found
در این مثال، یک متغیر به نام
$statusCode داریم که مقدار آن 404 است. این مقدار نشاندهنده یک کد وضعیت HTTP است که معمولاً برای صفحاتی که یافت نشدهاند به کار میرود. زمانی که $statusCode با یکی از کلید ها برابر باشد مقدار آن را بر میگرداند، و زمانی که با هیچ یک از کلید ها برابر نباشد مقدار default را بر می گرداند.خروجی match را میتوان در لحظه return, echo یا درون متغییر ریخت:
return match ($statusCode) {
// ...
};
echo match ($statusCode) {
// ...
};
$result = match ($statusCode) {
// ...
};بر خلاف switch-case که میتوان چندین خط را برای هر یک از حالات اجرا کرد در match تنها یک عمل قابل اجرا است:
switch (1){
case 1:
$a = 10;
$b = 20;
$c = 30;
echo 'hello';
echo 'bye';
return null;
}
match (1) {
1 => 'hello'
};همانطور که می بینید 6 عمل درون switch-case اجرا شده، اما در match تنها یک خط قابل نوشتن است، اما چندین راه وجود دارد که در match چندین عمل را اجرا کنید.
1- می توانید برای هر حالت یک کلوژر بنویسید و خروجی match را درون متغییر بریزید و آن را اجرا کنید:
$do = match (1){
1=> function (){
echo 'hello';
echo 'bye';
return null;
}
};
$do();2- میتوانید کلوژر را مستقیما درون match اجرا کنید:
match (1){
1=> (function (){
echo 'hello';
echo 'bye';
return null;
})()
};3- می توانید یک تابع بنویسید و آن را به match بدهید:
function test(){
echo 'hello';
echo 'bye';
return null;
}
$do = match (1){
1=> test()
};در نهایت match یک ابزار قدرتمند و مدرن برای جایگزینی switch در PHP است که به شما امکان میدهد کد خود را دقیقتر و خواناتر بنویسید.
👤 AmirHossein
💎 Channel: @DevelopixPHP