2017-10-15 2 views
0

Ich muss eine Funktion erstellen, um einer Variablen eine Zeichenkette entsprechend dem Wert einer anderen Variablen mit OOP zuzuweisen. Ich habe diese Funktion (calculaIMC) in einer Konstruktorklasse erstellt und dafür ein Array ($ imc_arr) verwendet. Mir ist klar, dass mein Code wahrscheinlich umständlich und sogar unpassend aussieht, aber es ist eine Uni-Übung, die dazu dient, bestimmte Dinge zu lehren. Das ist, was ich bis jetzt gefunden habe:PHP - Funktion zum Zuweisen einer Zeichenkette zu einer Variablen mit dem Schalter

<?php 
class CalculoIndice{ 
    ... 
    public $imc_arr = array(
     'Magreza grave', 
     'Magreza moderada', 
     'Magreza leve', 
     'Saud&aacute;vel', 
     'Sobrepeso', 
     'Obesidade Grau I', 
     'Obesidade Grau II (severa)', 
     'Obesidade Grau III (m&oacute;rbida)'); 

    function CalculoIndice(){ 
     $this->preparaCalculo(); 
     $this->calculaIMC(); 
    } 

    function preparaCalculo(){ 
     ... 
    } 

    function calculaIMC(){ 
     switch ($this->imc) { 
      case ($this->imc < 16): 
       $this->imc_cat = $this->imc_arr[0]; 
       break; 
      case ($this->imc < 17): 
       $this->imc_cat = $this->imc_arr[1]; 
       break; 
      case ($this->imc < 18.5): 
       $this->imc_cat = $this->imc_arr[2]; 
       break; 
      case ($this->imc < 25): 
       $this->imc_cat = $this->imc_arr[3]; 
       break; 
      case ($this->imc < 30): 
       $this->imc_cat = $this->imc_arr[4]; 
       break; 
      case ($this->imc < 35): 
       $this->imc_cat = $this->imc_arr[5]; 
       break; 
      case ($this->imc < 40): 
       $this->imc_cat = $this->imc_arr[6]; 
       break; 
      default: 
       $this->imc_cat = $this->imc_arr[7]; 
     } 
    } 
} 
?> 

Es funktioniert nicht. Ich konnte nicht richtig verstehen, was passiert und was das Problem ist, aber es gibt nicht die Variable (imc_cat), wie ich es beabsichtigte. Ich bin mir sicher, dass es etwas einfaches ist, dass ich vermisse, aber ich habe ein paar Stunden damit verbracht, nach einer Antwort zu suchen, die keinen Erfolg hat. Ich schätze jede Einsicht, was falsch sein könnte.

+0

Zuerst Ihre switch-Anweisung falsch aussieht, weil alle auf true gleichsetzen wird. Du solltest Rage verwenden, zB '$ this-> imc> 0 && $ this-> imc <16', $ this-> imc> 16 && $ this-> imc <18.5',' $ this-> imc> 18.5 && $ this-> imc <25' –

Antwort

2

Sie setzen keine Bedingungen in case Ausdrücke. case führt einen Gleichheitstest mit dem Ausdruck in der switch() Aussage, so

case ($this->imc < 16): 

bedeutet

if ($this->imc == ($this->imc < 16)) 

Sie sollten if/elseif statt switch/case werden.

if ($this->imc < 16) { 
    $this->imc_cat = $this->imc_arr[0]; 
} elseif ($this->imc < 17) { 
    $this->imc_cat = $this->imc_arr[1]; 
} ... 
} else { 
    $this->imc_cat = $this->imc_arr[7]; 
} 

Eigentlich gibt es eine Methode, die einige Programmierer verwenden (aber ich unterstütze nicht persönlich):

switch(true) { 
    case ($this->imc < 16): 
     $this->imc_cat = $this->imc_arr[0]; 
     break; 
    case ($this->imc < 17): 
     $this->imc_cat = $this->imc_arr[1]; 
     break; 
    ... 
} 
+0

Vielen Dank! Das hat mein Problem gelöst. Wie ich dachte, war mein Fehler ein einfacher, in diesem Fall nicht richtig zu verstehen, wie "Schalter" funktioniert. Ich hatte die "wahre" Methode während meiner Forschungen gesehen, aber es hat nicht funktioniert, wahrscheinlich wegen etwas anderem, dann habe ich es völlig vergessen. Es funktioniert jetzt. Die if/else-Lösung mag eine bessere sein, aber wenn man bedenkt, dass es nur eine Übung für die Universität ist, werde ich gehen, wie es ist. Danke dir nochmal! – pharaohlxvi

Verwandte Themen