PHP - 使用switch将字符串赋值给变量的函数

时间:2017-10-15 01:49:17

标签: php arrays switch-statement assign

我必须创建一个函数,根据使用OOP的其他变量的值为变量赋值。我在构造函数类中创建了这个函数(calculaIMC),为了实现这个功能,我使用了一个数组($ imc_arr)。我意识到我的代码可能看起来很麻烦甚至不合适,但它是一个旨在教授特定事物的单一练习。这就是我到目前为止所提出的:

<?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)。我确信这很简单,但我已经花了几个小时寻找答案但没有成功。 我很欣赏任何可能出错的见解。

1 个答案:

答案 0 :(得分:2)

您没有在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;
    ...
}

实际上,有一些程序员使用的方法(但我个人不认可):

<com.google.android.gms.ads.AdView xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        ads:adSize="BANNER"
        ads:adUnitId="my_admob_real_unitid"> </com.google.android.gms.ads.AdView>