【问题标题】:Yii - php warning: creating default object from empty valueYii - php 警告:从空值创建默认对象
【发布时间】:2015-04-29 09:14:57
【问题描述】:

我是 PHP 新手,YII 框架并不严格。 我有一些来自谷歌货币兑换率的代码。

for ($i = 1; $i <= 3; $i++)
     {
         $model = WidgetCurrencyElement::model()->findByPk($i);

         $buy = 100.25*$er[$i];
         $buy = (int)$buy;
         $buy /= 100;

         $sale = $er[$i]/0.010025;
         $sale = (int)$sale;
         $sale /= 100;

         $model->buy = $buy;
         $model->sale = $sale;

         if(!$model->save()){
             print_r($model->getErrors());
             die("not saved!");
         }
     }
     $this->render('currency', array('er1' => $er[1], 'er2'=>$er[2], 'er3'=>$er[3]));
}

它告诉我

“PHP 警告从空值创建默认对象”。我不明白为什么。 这种错误的原因是什么? '$model' 并非完全为空。

【问题讨论】:

  • findByPk($i) 正在循环中,所以数据库中的所有 ids(1,2,3) 都可以使用
  • 原因应该是一个或多个id不在db中。与其在这样的循环中查找项目,不如运行一个查询然后循环遍历结果以绕过此类问题。
  • @YatinMistry 你是对的,第三个 id 不见了,所以我按照 arkoad 在他的回答中指出的那样做了。

标签: php yii


【解决方案1】:

正如 Arkoak 所说,数据库中可能不存在一个或多个 id。所以最好在找到对象后确定它存在,然后尝试为它赋值:

for ($i = 1; $i <= 3; $i++)
 {
     $model = WidgetCurrencyElement::model()->findByPk($i);
     if($model != null)
     {
         $buy = 100.25*$er[$i];
         $buy = (int)$buy;
         $buy /= 100;

         $sale = $er[$i]/0.010025;
         $sale = (int)$sale;
         $sale /= 100;

         $model->buy = $buy;
         $model->sale = $sale;

         if(!$model->save()){
             print_r($model->getErrors());
             die("not saved!");
         }
     }

 }

【讨论】:

  • 非常感谢!你的回答帮助了我。我花了两个小时来修复这个警告。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 2013-06-19
  • 2016-07-31
  • 1970-01-01
相关资源
最近更新 更多