स्विच स्टेटमेंट में केस विकल्प कैसे आते हैं जिसमें बिना किसी जांच के अगले मामले में स्वचालित रूप से ब्रेक नहीं होता है?ब्रेक के बिना स्विच स्टेटमेंट
try {
switch($param) {
case "created":
if(!($value instanceof \DateTime))
throw new \Exception("\DateTime expected, ".gettype($value)." given for self::$param");
case "Creator":
if(!($value instanceof \Base\User)) {
throw new \Exception(get_class($value)." given. \Base\User expected for self::\$Creator");
}
default:
$this->$param = $value;
break;
}
} catch(Exception $e) {
echo $e->getMessage();
}
यदि परम "बनाया गया" है तो यह बनाए गए मामले में चेक करेगा, जो अच्छा है। जब चेक सफल होता है, तो मैं चाहता हूं कि कोड डिफ़ॉल्ट विकल्प पर जारी रहे, इसलिए कोई ब्रेक नहीं है; लेकिन इसके बजाय यह "निर्माता" जारी है जबकि $ param! = "निर्माता"!
मुझे पता है कि इसे कैसे हल करें (केवल मेरे बनाए गए "मामले में डिफ़ॉल्ट कोड जोड़ें), लेकिन मैं उस कोड को अक्सर दोहराना पसंद नहीं करता। मेरा वास्तविक सवाल यह है: यह "निर्माता" केस के साथ क्यों जारी रहता है जबकि मामला "निर्माता" नहीं है।
वाह, मैं इसे कैसे याद कर सकता था। : डी +1 – Ruel
महान जवाब! धन्यवाद! –
मैं इसे जोड़ दूंगा - जबकि फॉल-थ्रू कभी-कभी उपयोगी होता है - इसका उपयोग नहीं करना बेहतर होता है, जहां दोनों मामले सिर्फ गिरने के बजाय कुछ करते हैं (अच्छा: 'मामला "बनाया गया": केस "निर्माता": केस "something_else": do_stuff(); 'खराब:' मामला "बनाया गया": do_stuff(); केस "निर्माता": do_Second_stuff(); केस "something_else": do_remaining_stuff(); ') – dbemerlin