2017-09-11 6 views
-5

official Codeigniter documentationから次のコードをコピーしました。Codeigniter Model Classのプロパティーの使用法は?

class Blog_model extends CI_Model { 

     public $title; 
     public $content; 
     public $date; 

     public function get_last_ten_entries() 
     { 
       $query = $this->db->get('entries', 10); 
       return $query->result(); 
     } 

     public function insert_entry() 
     { 
       $this->title = $_POST['title']; // please read the below note 
       $this->content = $_POST['content']; 
       $this->date  = time(); 

       $this->db->insert('entries', $this); 
     } 

     public function update_entry() 
     { 
       $this->title = $_POST['title']; 
       $this->content = $_POST['content']; 
       $this->date  = time(); 

       $this->db->update('entries', $this, array('id' => $_POST['id'])); 
     } 

} 

ライン3-5を確認してください:public $title; public $content;public $date;と呼ばれる3つのプロパティがあります。

どのような使用法ですか?

このコードは、このコードを削除しても正常に機能するので、私はこの質問をしました。

私はそれらのプロパティを削除してテストしました。それでも私はget_last_ten_entries()insert_entry()update_entry()を問題なくコントローラから呼び出すことができます。

+0

Downvoters ...あなたはなぜあなたがダウンして私の質問を投票なかったことを私に伝えることができますしてください?私は将来、より良い質問をするのに役立ちます。 –

+0

ねえ、あなたはpublic、private、protectedを使ってhttps://stackoverflow.com/questions/4361553/what-is-the-difference-between-public-private-and-protectedをチェックすることができます。 – Harish

答えて

4

これらは、公開範囲がどこからでも変数/関数が利用できるようにすることができ

パブリック変数、他のクラスとオブジェクトのインスタンスです。 (値が割り当てられたら、他のクラスやインスタンスからアクセスすることができます)

なぜ機能はまだ動作しますか?

  • get_last_ten_entries()

    :あなたがそれらに値を代入されます。この関数は、変数
  • insert_entry() & update_entry()
  • 必要ありません。

値を割り当てる代わりに値を要求すると、エラーが発生します。例えば

(パブリック変数を削除したと仮定して)、次いで、以前の値を割り当てず

public function request_title(){ 
    return $this->$title; 
} 

ような関数を呼び出します。

希望します。

+0

つまり、 '$ this-> title = $ _POST ['title'];'を呼び出すと、クラスのパブリックプロパティ($ title)が作成されます。クラスファイルのプロパティを定義しないとここで動作しますが、他の状況ではそうではなく、バグを診断するのが難しくなる可能性があります。また、クラスの読みやすさも低下します。この回答は正しいと記されている必要があります。 – DFriend

0

これは公開変数です。それらを削除して関数get_last_ten_entries()、insert_entry()、update_entry()を実行すると、値が変数に動的に割り当てられるため、正常に実行されます。

$this->title = $_POST['title']; // please read the below note 
       $this->content = $_POST['content']; 
       $this->date  = time(); 

ここで、これらの変数は動的に作成され、エラーなく実行されます。

しかし、あなたは *

public function getVal(){ 
    return $this->title; 
} 

のような機能を使用する場合*

この変数のいずれかの以前の宣言がないので、エラーがスローされます。

0

これらの3つは、あなたがすでに推測していると思います。しかし、クラス定義から削除されてもまだ動作する理由は、PHPが動的に宣言されたプロパティを許可するということです。これは、いつでもプロパティを追加できることを意味します。

これはPHPの問題で、CodeIgniterのに

チェックアウト単離されていない: Can you create instance properties dynamically in PHP?

関連する問題