0
votes

Un meilleur moyen qu'un cas de commutation

J'ai une méthode qui utilise des blocs de cas de commutation similaires à ceux du code ci-dessous:

    switch ($totalMonthsFromImmigration) {
        case $totalMonthsFromImmigration <= 18:
            $this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
            $this->clauses->put('immigrant_2', null);
            $this->clauses->put('immigrant_3', null);
            break;
        case $totalMonthsFromImmigration <= 30:
            $this->clauses->put('immigrant_1', null);
            $this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
            $this->clauses->put('immigrant_3', null);
            break;
        case $totalMonthsFromImmigration <= 42:
            $this->clauses->put('immigrant_1', null);
            $this->clauses->put('immigrant_2', null);
            $this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
            break;
    }


3 commentaires

Pourquoi ne pas définir les trois à NULL initialement, alors générez simplement la chaîne 'Immigrant_ [x]' dans le commutateur pour définir le bon?


Notez que Switch ($ FOO) Case $ FOO Ne fonctionne pas comme vous le pensez. Si vous avez besoin de comparaisons non égales, vous devez utiliser si..else si..else , pas interrupteur .


@Deceze merci! Je vais changer ça.


5 Réponses :


0
votes

Essayez de définir la valeur par défaut, puis ajoutez de la valeur en fonction de la condition xxx


0 commentaires

2
votes

Une autre façon de le faire, essayez si strud> si vous souhaitez passer de SWITCH STROND> CAS

if ($totalMonthsFromImmigration <= 18){
 $this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
} else if ($totalMonthsFromImmigration <= 30) {
 $this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
else if ($totalMonthsFromImmigration <= 42) {
 $this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
}


0 commentaires

1
votes

Si vous appelez deux fois le setter pour les valeurs par défaut telles que @Jignesh JOISAR n'est pas souhaitée:

$this->clauses->put('immigrant_1', ($totalMonthsFromImmigration <= 18) ? $this->clauses->get('immigrant') : null);
$this->clauses->put('immigrant_2', ($totalMonthsFromImmigration > 18 && $totalMonthsFromImmigration <= 30) ? $this->clauses->get('immigrant') : null);
$this->clauses->put('immigrant_3', ($totalMonthsFromImmigration > 30 && $totalMonthsFromImmigration <= 42) ? $this->clauses->get('immigrant') : null);


0 commentaires

0
votes

Je pensais qu'il y a une formule mathématique au lieu d'utiliser un étui de commutation ou si sinon. Mais je n'en ai pas trouvé un. C'est ma solution basée sur les réponses que j'ai connues ici:

    $this->clauses->put('immigrant_1', null);
    $this->clauses->put('immigrant_2', null);
    $this->clauses->put('immigrant_3', null);

    if ($totalMonthsFromImmigration <= 18) {
        $this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
    } else if ($totalMonthsFromImmigration <= 30) {
        $this->clauses->put('immigrant_2', $this->clauses->get('immigrant'));
    } else if ($totalMonthsFromImmigration <= 42) {
        $this->clauses->put('immigrant_3', $this->clauses->get('immigrant'));
    }


0 commentaires

0
votes
switch ($totalMonthsFromImmigration) {
         case $totalMonthsFromImmigration <= 42:
            $this->clauses->put('immigrant_1', $this->clauses->get('immigrant'));
            $this->clauses->put('immigrant_2', null);
            $this->clauses->put('immigrant_3', null);
        break;
        default:
           echo "Your logic you want greeter then 42"
}

0 commentaires