1

CodeIgniter フレームワークで PHP を実行しています。デフォルトの codeigniter を拡張およびオーバーライドする独自の Model クラスを作成しました。これはすぐ下にあります:

<?php
class MY_Model extends CI_Model
{
    public $table;
    public function __construct()
    {
        parent::__construct();
        $this->table = get_class($this);
        $this->fields = $this->db->field_data($this->table);
    }
}

次に、データベースで言語を管理するためのモデルを作成しました。コードは以下のとおりです。Language_model 内からエコーする$this->tableと、必要な「Language_model」が得られます。$this->db->field_data($this->table)しかし、テーブル名が無効であるため ("MY_Model" が無効)、" " を実行している親でコードがエラーになります。コードは、エラーのために子で var_dump を実行することさえありません。 PHP 5.3.9 を実行$this->db->field_data($this->table)するための値として " " も "Language_model" を使用しないのはなぜですか$this->table?

class Language_model extends MY_Model {
    function __construct()
    {
        parent::__construct();
        var_dump($this->fields);
    }
}
4

1 に答える 1

0

get_class には特定の動作があります。

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');


class TestBase extends CI_Controller{
    public function nameWthis(){
        return get_class($this);
    }
    public function nameWOthis(){
        return get_class();
    }
}



class Test extends TestBase{
    public function index()
    {
        echo $this->nameWthis();
        echo '<br/>';
        echo $this->nameWOthis();
    }
}

出力します

Test
TestBase

パラメータなしで get_class() を使用すると、静的な解決が行われます。これが問題になる可能性があります。get_class($this) は、現在のクラス名を動的に返し、予想どおりに機能するはずです。

「Language_model」が存在することを確認するコードを追加します。また、名前の大文字と小文字が区別され、エラーが発生する可能性があることに注意してください。

エラーコードがあった方が良いです。ログを確認してください。$this->fields = ... の直前に var_dump(table) を配置します。

于 2012-05-15T16:26:22.617 に答える