PHP-使用开关将字符串分配给变量的函数
我必须使用OOP创建一个函数,根据其他变量的值将字符串分配给变量。我在构造函数类中创建了这个函数(calculaIMC),为了实现它,我使用了一个数组($imc_arr)。我意识到我的代码可能看起来很麻烦,甚至可能不合适,但这是一个旨在教授特定内容的uni练习。到目前为止,我就是这么想的:PHP-使用开关将字符串分配给变量的函数,php,arrays,switch-statement,assign,Php,Arrays,Switch Statement,Assign,我必须使用OOP创建一个函数,根据其他变量的值将字符串分配给变量。我在构造函数类中创建了这个函数(calculaIMC),为了实现它,我使用了一个数组($imc_arr)。我意识到我的代码可能看起来很麻烦,甚至可能不合适,但这是一个旨在教授特定内容的uni练习。到目前为止,我就是这么想的: <?php class CalculoIndice{ ... public $imc_arr = array( 'Magreza grave', 'Mag
<?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):
实际上,有些程序员使用一种方法(但我个人并不赞同):
开关(真){
案例($this->imc<16):
$this->imc_cat=$this->imc_arr[0];
打破
案例($this->imc<17):
$this->imc_cat=$this->imc_arr[1];
打破
...
}
您不能将条件放入大小写
表达式中case
使用switch()
语句中的表达式执行相等性测试,因此
case ($this->imc < 16):
实际上,有些程序员使用一种方法(但我个人并不赞同):
开关(真){
案例($this->imc<16):
$this->imc_cat=$this->imc_arr[0];
打破
案例($this->imc<17):
$this->imc_cat=$this->imc_arr[1];
打破
...
}
首先,您的switch语句看起来不正确,因为所有语句都等于true。您应该使用rage,即$this->imc>0&&$this->imc<16
,$this->imc>16&&$this->imc<18.5
,$this->imc>18.5&&$this->imc<25
,首先,您的switch语句看起来不正确,因为所有语句都等于true。你应该使用rage,即$this->imc>0&&$this->imc<16
,$this->imc>16&$this->imc<18.5
,$this->imc>18.5&$this->imc<25
非常感谢!这解决了我的问题。因为我认为我的错误很简单,在这种情况下,我没有正确理解“开关”是如何工作的。我在研究中看到了“真实”的方法,但它不起作用,可能是因为其他原因,然后我完全忘记了它。它正在工作。if/else解决方案可能更好,但考虑到这只是大学的一个练习,我将原封不动地离开。再次非常感谢!非常感谢你!这解决了我的问题。因为我认为我的错误很简单,在这种情况下,我没有正确理解“开关”是如何工作的。我在研究中看到了“真实”的方法,但它不起作用,可能是因为其他原因,然后我完全忘记了它。它正在工作。if/else解决方案可能更好,但考虑到这只是大学的一个练习,我将原封不动地离开。再次非常感谢!
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;
...
}