-1

各列のゲッターとセッターを使用する代わりに、モデルから更新したいのですが、モデルで使用したいのですが、__get機能__setしません。

例を次に示します。

class Video extends CI_Model {

  private $video_id = null;
  private $title;
  private $url;
  private $thumb;
  private $width;
  private $height;

 public function __set($name, $value){
    if(!$this->video_id) return false;
    if(property_exists($this, $name))
    {
       $data = array(
          $name      => trim($this->security->xss_clean($value)),
      'updated'  => date('Y-m-d H:i:s'),
      );
      if($this->db->update('users', $data, array('video_id' => (int)$this->video_id)))
      {
          return $this->db->affected_rows();
      }
      else
      {
      return $this->db->_error_message();
      }
    }
 }

}

次に、コントローラーから次のことを行います。

$this->video->width(780);

これは以下を生成します:

<b>Fatal error</b>:  Call to undefined method Video::width() in <b>/home/crazy/public_html/dev/application/controllers/admin.php</b> on line <b>169</b><br />
4

1 に答える 1

2

まず、この件に関するドキュメントを注意深く読む必要があります。間違った魔法の方法を使用しています。__setオブジェクトのプロパティを設定するために使用されます:

$obj->width = 780; // Will be translated to:
$obj->__set('width', 780);

を使用する__callと、メソッドがオーバーロードされます。

$obj->width(780); // Will be translated to:
$obj->__call('width', array(780));

次に、 の CI ソース コードを確認する必要がありますCI_Model。正しいバージョンにリンクすると、独自の__getメソッドが設定されます。独自のゲッターを設定する場合は、これを考慮する必要があります。

于 2013-04-28T09:48:23.427 に答える