PHP - 使用 switch 将字符串分配给变量的函数
PHP - Function to assign a string to a variable with switch
我必须创建一个函数,根据使用 OOP 的其他变量的值将字符串分配给变量。我在构造函数 class 中创建了这个函数 (calculaIMC),为了实现这一点,我使用了一个数组 ($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;
...
}
我必须创建一个函数,根据使用 OOP 的其他变量的值将字符串分配给变量。我在构造函数 class 中创建了这个函数 (calculaIMC),为了实现这一点,我使用了一个数组 ($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;
...
}