1

我只是想知道为什么我的 Codeigniter 项目会生成以下警告消息。

A PHP Error was encountered

Severity: Warning

Message: Creating default object from empty value

Filename: controllers/person.php

Line Number: 268

在我的人控制器中,

function __construct()
    {
        parent::__construct();

        // load library
        $this->load->library(array('table','form_validation'));

        // load helper
        $this->load->helper('url');
        $this->load->config('array_constant', TRUE);

        // load model
        $this->load->model('Person_model','',TRUE);
    }
// set empty default form field values
    function _set_fields()
    {
        Line No: 268 $this->form_data->id = '';
        $this->form_data->name = '';
        $this->form_data->gender = '';
        $this->form_data->dob = '';
        $this->form_data->district = '';
        $this->form_data->education = '';
        $this->form_data->occupation = '';
        $this->form_data->annual_income = '';
        $this->form_data->company_name = '';
        $this->form_data->description = '';
    }

在我的视图文件中,

<table width="100%">
          <tr>
            <td width="30%">ID</td>
            <td><input type="text" name="id" disabled="disable" class="text" value="<?php echo set_value('id'); ?>"/></td>
            <input type="hidden" name="id" value="<?php echo set_value('id',$this->form_data->id); ?>"/>
        </tr>
        <tr>
            <td valign="top">Name<span style="color:red;">*</span></td>
            <td><input type="text" name="name" class="text" value="<?php echo set_value('name',$this->form_data->name); ?>"/>
<?php echo form_error('name'); ?>
            </td>
        </tr>

抑制上述警告的任何想法或建议!

echo "<pre>";
        var_dump($this->form_data);
        echo "</pre>";

object(stdClass)#21 (10) {
  ["id"]=>
  string(0) ""
  ["name"]=>
  string(0) ""
  ["gender"]=>
  string(0) ""
  ["dob"]=>
  string(0) ""
  ["district"]=>
  string(0) ""
  ["education"]=>
  string(0) ""
  ["occupation"]=>
  string(0) ""
  ["annual_income"]=>
  string(0) ""
  ["company_name"]=>
  string(0) ""
  ["description"]=>
  string(0) ""
}
4

2 回答 2

4

此通知在 PHP 5.4 及更高版本中生成。这不是错误,而是通知 - 旨在帮助您调试应用程序并提高对可能问题的认识。

当您_set_fields最初调用$this->form_dataisNULL时,您尝试使用以下行将 NULL 视为对象:

$this->form_data->id = '';

NULL不能有像“id”这样的属性,所以通知告诉你 PHP 假设你想要一个对象,所以它会自动为你创建一个。

有很多方法可以解决这个问题,需要对代码进行一些重组,但有一个简单的解决方案可以使通知静音:

$this->form_data = new stdClass;
$this->form_data->id = '';
// etc.

更好的解决方案是为您的对象使用一个类,非常简单的示例:

$this->form_data = new MY_Form_Data_Object();

class MY_Form_Data_Object { // use a better name that describes what this is
    public $name = '';
    public $gender = '';
    public $dob = '';
    // etc.
    // add some helpful methods here when needed, like validation
    // maybe a constructor to initialize some values
}
于 2013-01-01T17:30:24.603 回答
2

我有同样的问题,除了我无法更改我的所有代码。

为了让 CI 抑制警告,我在 index.php 中将 ENVIRONMENT 设置为生产:

//define('ENVIRONMENT', 'development');
define('ENVIRONMENT', 'production');   

基本上 CI 设置错误报告

error_reporting(0); 
于 2013-04-20T13:35:49.767 回答