Я должен сделать функцию для назначения строки переменной в соответствии со значением другой переменной, используя ООП. Я создал эту функцию (calclaIMC) внутри класса конструктора, и для этого я использовал массив ($ imc_arr). Я понимаю, что мой код, вероятно, выглядит громоздким и даже неуместным, но это уникальное упражнение, предназначенное для обучения конкретным вещам. Вот что я придумала до сих пор:
<?php
class CalculoIndice{
...
public $imc_arr = array(
'Magreza grave',
'Magreza moderada',
'Magreza leve',
'Saudável',
'Sobrepeso',
'Obesidade Grau I',
'Obesidade Grau II (severa)',
'Obesidade Grau III (mó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), как я планировал. Я уверен, что это что-то простое, что мне не хватает, но я потратил несколько часов на поиски ответа безуспешно.
Я ценю любое понимание того, что может быть не так.
Вы не ставите условия внутри case
выражения. case
выполняет тест на равенство с выражением в switch()
заявление, так
case ($this->imc < 16):
средства
if ($this->imc == ($this->imc < 16))
Вы должны использовать if/elseif
вместо switch/case
,
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;
...
}
Других решений пока нет …