Каков наилучший способ автоматического генерации getters и seters для класса в php?

Я регулярно создаю класс с несколькими частными переменными. Когда экземпляр этого класса установлен, должно быть возможно заполнить все переменные класса геттерами и сеттерами.

Есть ли простой способ сделать это, не набирая все эти сеттеры и геттеры для каждой переменной при создании класса?

теперь мне нужно набрать это для каждого var в классе

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

и

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

Теперь мы используем RegExp, но я не знаю, является ли это самым простым способом... Мы используем Eclipse как среду, поэтому, возможно, есть несколько полезных плагинов?

Ответы

Ответ 1

С Eclipse перейдите в Настройки → PHP → Редактор → Шаблоны → Создать и используйте что-то вроде этого:

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

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

Чтобы использовать тип шаблона, имя и нажмите ctrl + space - контекстное меню также должно автоматически появляться при вводе имени.

Ответ 2

Вы просмотрели методы __set и __get? Не знаю, означает ли это то, что вы имеете в виду, но автоматически вызывается всякий раз, когда член класса является SET или Retrieved/Fetched/Accessed.

Ответ 3

Zend Studio имеет функцию автоматического генерации геттера/сеттера.

Ответ 4

Я думаю, что лучший способ - использовать __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 установите /get и проверите остальную часть строки как значение класса:)

другой пример

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

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

//....

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

Больше работы предстоит сделать

Ответ 5

Возможно, лучшее решение:

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, но они довольно медленны.