2017-10-15 11 views
0

OOP를 사용하는 다른 변수의 값에 따라 변수를 문자열에 할당하는 함수를 만들어야합니다. 생성자 클래스 내부에서이 함수 (calculaIMC)를 생성하고 배열 ($ imc_arr)을 사용하기 위해이 함수를 작성했습니다. 내 코드가 아마도 복잡하고 심지어 부적절한 것처럼 보일 수도 있지만 특정 일을 가르치기 위해 설계된 일종의 연습입니다. 그것이 내가 지금까지 생각해 낸 것입니다 :PHP - 스위치를 사용하여 변수에 문자열을 할당하는 함수

<?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]; 
     } 
    } 
} 
?> 

작동하지 않습니다. 나는 무슨 일이 일어나고 있는지, 문제는 무엇인지를 알 수는 없지만 의도 한대로 (imc_cat) 변수를 반향하지 않습니다. 나는 그것이 내가 누락 된 단순한 무언가이다라고 확신한다. 그러나 나는 성공없이 어떤 대답을 찾고있는 데 몇 시간을 보냈다. 무엇이 잘못 되었을지에 대한 통찰력에 감사드립니다.

+0

먼저 switch 문이 잘못 보인다. rage ie'$ this-> imc> 0 && $ this-> imc <16','$ this-> imc> 16 && $ this-> imc <18.5','$ this-> imc> 18.5 &&를 사용해야합니다. $ this-> imc <25' –

답변

2

case 수식 안에 조건을 넣지 마십시오. caseswitch() 문의 표현식과 평등 테스트를 수행하므로

case ($this->imc < 16): 

당신은 switch/case 대신 if/elseif를 사용한다

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

을 의미한다.

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]; 
} 

사실, 일부 프로그래머가 사용하는 방법이 있어요 (하지만 난 개인적으로하지 않습니다 보증) : 모두에 해당 동일시하기 때문에

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

대단히 감사합니다! 그게 내 문제를 해결해 줬어. 내 실수가 단순한 것이라고 생각 했으므로,이 경우 스위치가 어떻게 작동하는지 제대로 이해하지 못했습니다. 내 연구 중에 "진정한"방법을 보았지만 그다지 효과가 없었습니다. 아마도 뭔가 다른 점 때문에 완전히 잊어 버렸습니다. 이제 작동 중입니다. if/else 솔루션이 더 좋을 수도 있지만, 대학을위한 운동 일 뿐이라고 생각하면 그대로 떠날 것입니다. 대단히 감사합니다! – pharaohlxvi