Auto en iyi yolu, php bir sınıf için alıcılar ve belirleyiciler neler oluşturmak olduğunu?

5 Cevap php

I regularly create a class that has a few private variables. When an instance of this class is set, it should be possible to fill all variables of the class with getters ve setters.

Sınıfın yaratılması her bir değişken için tüm bu belirleyiciler ve alıcılar yazmak zorunda kalmadan bunu yapmak için kolay bir yolu var mı?

şimdi ben sınıfta her var bu yazmak zorunda

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

ve

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

We now use RegExp, but i don't know if this is the easiest way... We use Eclipse as environment, so perhaps there are some usefull plugins?

5 Cevap

Eclipse Tercihler go -> PHP -> Editör -> Şablonlar -> Yeni ve böyle bir şey kullanabilirsiniz:

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

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

Eğer adını yazdığınızda bir bağlam menüsü de otomatik olarak görünür olmalıdır - bu isim ve basın ctrl + boşluk bulunuyor şablon türünü kullanın.

Eğer __ set ve __ get yöntemleri baktınız mı? Bu ne demek olduğunu bilmiyorum ama bir sınıf üyesi SET veya erişildi / Alınan / alındı ​​olduğunda otomatik olarak adlandırılır.

Zend Studio otomatik alıcı / ayarlayıcı nesil bir özelliği vardır.

Ben iyi yolu kullanmak olduğunu düşünüyorum __ set ve __ bazı dize fonksiyonları ile olsun, Burada sana göstereyim.

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 () yöntemi gibi fonksiyonları ile ayarlamak için izin verir

$profile->setUsername('Robert Pitt'); sürece sen substr set / get ve sınıfın bir değer olarak dize geri kalanı için kontrol edin :)

Başka bir örnek,

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

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

//....

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

Burada yapılması gereken gidecekseniz fazla çalışma

Belki daha iyi 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;
    }
}

Ve sadece bu sınıfı genişletir. Ya da __ kümesi kullanmak ve __ yöntemleri olsun, ama onlar oldukça yavaş olabilir.