<?php switch (1) { case 1: $var = 'Test'; echo ' in case 1 '; break; case 2: if (isset($var)) echo '($var is set)'; echo ' in case 2 '; break; case 3: echo ' in case 3 '; break; } // Result: in case 1 switch (1) { case 1: { $var = 'Test'; echo ' in case 1 '; } case 2: if (isset($var)) echo '($var is set)'; echo ' in case 2 '; break; case 3: if (isset($var)) echo '($var is set)'; echo ' in case 3 '; break; } // Result: in case 1 ($var is set) in case 2 switch (1) { case 1: $var = 'Test'; echo ' in case 1 '; case 2: if (isset($var)) echo '($var is set)'; echo ' in case 2 '; break; case 3: if (isset($var)) echo '($var is set)'; echo ' in case 3 '; break; } // Result: in case 1 ($var is set) in case 2 switch (1) { case 1: $var = 'Test'; echo ' in case 1 '; case 2: { if (isset($var)) echo '($var is set)'; echo ' in case 2 '; } case 3: if (isset($var)) echo '($var is set)'; echo ' in case 3 '; break; } // Result: in case 1 ($var is set) in case 2 ($var is set) in case 3
در PHP، ظاهراً بودن یا نبودن اون گیومه ها {}
هیچ تاثیری در روند اجرای برنامه نداره، بلکه این break
هستش که تعیین کنندست... در حالی که در بیشتر زبانها (مثل java, pawn, c++ و...) می تونه حوزه/scope متغیر ها رو داخل هر case
تعیین کنه.
توضیح رسمی C99 درباره دستور switch
:
BREAK: A break statement terminates execution of the smallest enclosing switch or iteration statement.
البته این یه نکته ریزه که هنوز خیلی از برنامه نویس ها ازش مطلع نیستن
من هم بعد از 1-2 ساعت تحقیق متوجه این موضوع شدم، چراکه مستندات خودشون هم به این نکته اشاره نکردن. (تا جایی که گشتم)