yii2:在foreach中定义的未定义变量

时间:2014-12-29 19:06:18

标签: php yii2

我在view.php中有这个查询

<?php
    $packageq= Yii::$app->db->createCommand
         ("SELECT p.package_name,p.`total_charges` 
          as 'package_charges'
          FROM `package` p, estimate e,patient_detail pd 
          where pd.package=p.id 
          and e.ipd_patient_id=pd.ipd_patient_id 
          and e.id=$model->id");
    $packages= $packageq->queryAll();
    //var_dump($packages);exit;
    echo '<table class="table table-striped table-bordered table-hover">'; 
    echo "<tr><th>Package Name</th><th>Amount</th></tr>"; 
    if (![$packages]==''){
    foreach($packages as $package){
     echo "<tr><td>";  
     echo $package['package_name'];
     echo "</td><td>";  
     $d= $package['package_charges'];
     echo $d;

      echo "</td></tr>"; 
    }
    }else{
        $d=0;
    }
    var_dump($d);exit;
    echo "<tr><td>";
    echo 'Total D';
    echo "</td><td>"; 

    echo "<tr><td>";
    echo 'Total A+B+C+D';
    echo "</td><td>"; 
    echo ($a+$b+$c+$d);
    echo "</table>";  
    ?>

当我为$ packages做var_dump时,我正在

array (size=0)
  empty

当我为$ d做var_dump时,我收到错误 变量d未定义 任何具体原因或我在这里做错了什么。 谢谢你的建议。

1 个答案:

答案 0 :(得分:1)

关于$packages$packageq->queryAll()不得返回任何内容。关于$ d,您将其转储到定义$d的范围之外。如果您希望能够在具有var_dump的范围内访问$ d,则必须在if / else之外定义$ d。如果您使用$d;在if / else之外声明$ d或将$d定义为空值(例如$d = 0;),则您可以在if内设置if / else并且仍然可以在父作用域中访问它。如果您在条件之前定义了$d = 0,则可以将else { $d = 0; }全部放在一起。

此外,如果$ packages是一个数组,并且您想测试它是否已填充,您可以考虑

if(!empty($packages)) {
    ...
}

而不是

if(![$packages] == '') {
    ...
}