Comment s'agit-il d'une option de cas dans une instruction de commutation qui ne contient pas de pause automatiquement vers l'avant vers un cas suivant sans chèque?
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();
}
6 Réponses :
Peut-être que cela vous éclairera: p>
Pour répondre à votre "question réelle": Pourquoi est-ce que cela continue avec le cas "Créateur" pendant que le cas n'est pas "Créateur". EM> P>
Parce que vous n'avez pas En outre, vous n'avez pas besoin break code>. Sans cela, cela continuera aux cas en dessous. La seule solution que je peux penser consiste à mettre votre code par défaut dans les cas et à ajouter break code>. P>
break code> sur le boîtier par défaut depuis son dernier cas dans le bloc de commutation. P>
Frassthrough était une caractéristique de conception intentionnelle pour permettre le code comme: Il est conçu de manière à ce que l'exécution tombe en panne de cas au cas. p> La règle de pouce ici est, si cela ne dépend pas du commutateur, déplacez-le du commutateur. P > p> Par défaut code> est un cas comme n'importe quel autre, sauf que le saut Il se produit si aucun autre cas n'a été déclenché. Il ne s'agit pas d'un "faire après avoir exécuté l'instruction de cas sélectionnée". Dans votre exemple, vous pouvez envisager: p>
J'ajouterais cela - tandis que la chute est parfois utile - il vaut mieux ne pas l'utiliser où les deux cas font quelque chose au lieu de tomber (bon: cas "créé": cas "Créateur": cas "quelque chose_else": do_stuff (); code> mauvais: cas "créé": do_stuff (); cas "Créateur": do_second_stuff (); cas "quelque chose_else": do_remaining_stuff (); code>)
@DBemerlin: C'est vraiment assez dangereux, bien que acceptable si les cas sont courts ou dans des langues qui soutiennent la franchise explicite (comme c #).
Le mieux est d'ajouter un commentaire à dire que les frassums sont intentionnels.
Je ne vois pas vraiment ce que tu veux. P>
Tous les outils sont là. P>
Ce n'est pas à propos de ce que je veux, c'est pourquoi une instruction de commutation fonctionne comme ceci.
Je m'excuse de savoir que j'ai mal compris la question. L'histoire est la réponse. Comme la plupart des programmes de programmation, quelqu'un l'a dit. C'est comme ça qu'ils ont dit. Il y a une certaine histoire là-bas (essentiellement que c a commencé), mais c'est la syntaxe.
dans PHP 8, nous avons Un exemple: p> voici son interrupteur code> équivalent: p> correspondant code>, similaire avec l'expression code> interrupteur code> mais est significativement plus courte:
switch ($statusCode) {
case 200:
case 300:
$message = null;
break;
case 400:
$message = 'not found';
break;
case 500:
$message = 'server error';
break;
default:
$message = 'unknown status code';
break;
}