Tùy chọn trường hợp như thế nào trong câu lệnh chuyển đổi không có dấu ngắt tự động chuyển tiếp sang trường hợp tiếp theo mà không kiểm tra?tuyên bố chuyển đổi mà không vi phạm
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();
}
Nếu tham số "được tạo", nó sẽ thực hiện kiểm tra trong trường hợp đã tạo, điều này tốt. Khi kiểm tra thành công, tôi muốn mã tiếp tục với tùy chọn mặc định, đó là lý do tại sao không có ngắt ;. Nhưng thay vào đó nó vẫn tiếp tục "Creator" trong khi $ param! = "Creator"!
Tôi biết cách giải quyết vấn đề này (chỉ cần thêm mã mặc định trong trường hợp của tôi "được tạo"), nhưng tôi không muốn lặp lại mã đó quá thường xuyên. Câu hỏi thực tế của tôi là: Tại sao nó tiếp tục với trường hợp "Người sáng tạo" trong khi trường hợp không phải là "Người sáng tạo".
Wow, làm sao tôi có thể bỏ lỡ điều đó. : D +1 – Ruel
Câu trả lời hay! Cảm ơn! –
Tôi sẽ thêm điều đó - trong khi thông qua đôi khi hữu ích - tốt hơn là không sử dụng nó khi cả hai trường hợp làm điều gì đó thay vì chỉ rơi qua (Tốt: 'trường hợp 'được tạo ra": case "creator": case "something_else": do_stuff(); 'Bad:' case "được tạo": do_stuff(); case "creator": do_Second_stuff(); case "something_else": do_remaining_stuff(); ') – dbemerlin