сеттеры / геттеры в одном методе
Вопрос
Просто идея.
Пример(в PHP): установить имя: $ Object- & GT; имя ( 'имя'); чтобы получить имя: $ Object- & GT; имя (); р>
Если аргумента нет: метод используется как метод получения, иначе как метод установки. Для простых получателей / сеттеров. Глупо, что угодно, может быть?
edit: следить за ответами: мне не очень нравится get and set , потому что я предпочитаю, чтобы интерфейс был как можно более явным. Когда есть только несколько свойств, это также излишне ИМХО. Поэтому я хотел бы сузить его до классов / объектов с парой явных методов получения / установки.
Решение
Конечно, вы могли бы сделать это, если это имеет смысл в вашем приложении, иначе я бы просто использовал стандартные методы получения / установки, которые уже были установлены для вас. Ваша функция может выглядеть примерно так:
public function name($val = null)
{
if (is_null($val))
{
return $this->name;
}
else
{
$this->name = $val;
}
}
Другие советы
Проблема в том, что за этим будет трудно следить. Я бы предпочел использовать PHP5 __get и __set, чтобы было более естественно получать и устанавливать переменные, и каждый точно знал бы, что я делаю. IE:
class myClass { function __get($name) { return $this->array[$name]; } function __set($name, $value) { $this->array[$name] = $value; } function print() { echo $this->array['test']; } } $obj = new myClass; $obj->test = "Hi"; echo $obj->test; //echos Hi. $obj->print(); //echos Hi.
Это можно сделать с помощью магического метода __call ().
class Test {
public function __call($name, array $args) {
$variable =& $this->$name;
if(!empty($args)) {
$variable = $args[0];
}
return $variable;
}
}