Каков наилучший способ автоматического генерации 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, но они довольно медленны.