2009-09-25 19 views
11

私は定期的にいくつかのプライベート変数を持つクラスを作成します。 このクラスのインスタンスが設定されている場合、クラスのすべての変数をgetterおよびsetterで満たすことができるはずです。PHPでクラスのゲッタとセッタを自動的に生成する最良の方法は何ですか?

クラスの作成時に各変数にこれらのセッターとゲッターをすべて入力しなくても簡単に行うことができますか?

今私たちは今、正規表現を使用して、クラス内の各VARのために

public function setVar($var){ 
$this->var = $var; 
} 

public function getVar(){ 
return $this->var; 
} 

これを入力する必要がありますが、これは最も簡単な方法であれば、私は知りません。.. 。 私たちは環境としてEclipseを使用しているので、おそらく便利なプラグインがいくつかありますか?

+0

痛みはありますが、これらの実装にはほとんど時間がかかりません。私は通常、私が昼食を食べている間、彼らをします。さらに良い方法は、学生にコードを渡して追加することです。 – Chris

+0

@Chrisそれを他の人に渡すと、良い解決策とはみなされません。学生やアドインでも同様に適切な解決法が必要になるかもしれません... – Kennethvr

答えて

33

環境設定に行く - > PHP - >編集 - >テンプレート - >新規およびこのようなものを使用します - 必要があるコンテキストメニュー、それは名前を押し、Ctrl +スペースのTypeのテンプレートを使用するには

private $$${PropertyName}; 
${cursor}  
public function get${PropertyName}() 
{ 
    return $$this->${PropertyName}; 
} 

public function set${PropertyName}($$value) 
{ 
    $$this->${PropertyName} = $$value; 
} 

を名前を入力すると自動的に表示されます。

+0

これらのプロパティでは、キャメルケースの使い方に関する修正がありますか? – porfiriopartida

+0

@porfiriopartida私は同じことについて不思議に思って、getとsetに別の変数を使用することになりました。テンプレートを使用するときは、プロパティとゲッター関数を設定するだけで済みます。 ;-) – andreas

2

__setメソッドと__getメソッドを見ましたか?これがあなたが意味するものなのかどうかはわかりませんが、クラスメンバーがSETまたはRetrieved/Fetched/Accessedのときは自動的に呼び出されます。

0

多分、より良いsollution:

class base { 

    protected $_vars = array(); 


    public function setVar($name, $value = null) { 
     $this->_vars[$name] = $value; 
    } 

    public function getVar($name) { 
     return isset($this->_vars[$name]) ? $this->_vars[$name] : null; 
    } 
} 

そして単にこのクラスを拡張します。また、__setと__getメソッドを使うこともできますが、かなり遅いです。

+0

これは良い解決策かもしれませんが、すべてをアレイに入れて、すべて異なるヴァールではないのは良い考えですか?それとも問題じゃないの? – Kennethvr

+1

データ(配列、文字列など)が正常に動作していれば問題ありません。しかし、データベースオブジェクトやその他のオブジェクトのようなオブジェクトを設定したい場合は、このようにしないでください。その後、コンストラクタなどを使用します。 – Pawka

+0

__setと__get mehodsが遅いのは確かですか? – andho

1

Zend Studioには自動ゲッタ/セッタ生成機能があります。

1

私は最善の方法は、いくつかの文字列関数で__setと__getを使うことです、ここで私を見せてください。

class UserProfile 
{ 
    public function __get($key) 
    { 
     if(isset($this->$key)) 
     { 
      return $this->$key; 
     } 
    } 

    public function __set($key,$val) 
    { 
     $this->cahnge($key,$val); 
    } 

    public function __call($key,$params) 
    { 
     if(substr("set",$key)) 
     { 
      //Update 
     }elseif(substr("get",$key)) 
     { 
      //return 
     } 

     //Else Blah 
    } 

    private function change($key,$val) 
    { 
     if(isset($this->$key)) 
     { 
      $this->$key = $val; 
     } 
    } 
} 

__call()メソッドは、あなたがいる限り、このような

$profile->setUsername('Robert Pitt');などの機能を設定することが可能になりますあなたsubstrとしてセット/取得し、クラスの値として文字列の残りの部分をチェックしてください。 )

別の例

public function __call($method,$params = array()) 
{ 

    if(isset($params[0]) && is_string($params[0])) 
    { 
     $this->$method = $params[0]; 
    } 
} 

//.... 

$profile->username('Robert Pitt'); 

より多くの仕事がここ

を行わなければTheresのEclipseによる
+0

これは本当ですか?私はそれを管理することができませんでした。これはPHPマジックの一種ですか? '$ profile-> __get(username)'を呼び出すことができますが、 '$ profile-> getUsername()'を呼びたいと思います。 – azerafati

関連する問題