我只是厌倦了解,为什么我的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) ""
}
答案 0 :(得分:4)
此通知在PHP 5.4及更高版本中生成。这不是一个错误,它是一个通知 - 旨在帮助您调试应用程序并提高对可能问题的认识。
当您最初致电_set_fields
时,$this->form_data
为NULL
,然后您尝试使用此行处理类似对象的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
}
答案 1 :(得分:2)
我有同样的问题,除了我无法更改我的所有代码。
要让CI禁止警告,我在index.php中将ENVIRONMENT设置为production:
//define('ENVIRONMENT', 'development');
define('ENVIRONMENT', 'production');
基本上CI设置错误报告
error_reporting(0);