Fallthrough был преднамеренной особенностью дизайна для разрешения кода, подобного:
switch ($command) {
case "exit":
case "quit":
quit();
break;
case "reset":
stop();
case "start":
start();
break;
}
Он разработан таким образом, что выполнение сокращается от случая к случаю.
default
- такой же случай, как и любой другой, за исключением того, что прыжок происходит, если не было запущено ни одного другого случая.Это ни в коем случае не инструкция «сделай это после запуска фактического выбранного случая».В вашем примере вы могли бы рассмотреть:
switch($param) {
case "created":
if(!($value instanceof \DateTime))
throw new \Exception("\DateTime expected, ".gettype($value)." given for self::$param");
break;
case "Creator":
if(!($value instanceof \Base\User)) {
throw new \Exception(get_class($value)." given. \Base\User expected for self::\$Creator");
}
break;
}
$this->$param = $value;
Практическое правило здесь, если это не зависит от переключателя, переместите его из переключателя.