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

この通知は、PHP5.4以降で生成されます。これはエラーではなく、通知です。アプリケーションをデバッグし、起こりうる問題の認識を高めるのに役立つことを目的としています。

_set_fields最初に$this->form_dataisを呼び出すと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
}
于 2013-01-01T17:30:24.603 に答える
2

すべてのコードを変更できなかったことを除いて、同じ問題がありました。

CI が警告を抑制できるようにするには、index.php で ENVIRONMENT を production に設定します。

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

基本的にCIはエラー報告を設定します

error_reporting(0); 
于 2013-04-20T13:35:49.767 に答える