代码之家  ›  专栏  ›  技术社区  ›  Kennethvr

在PHP中自动生成类的getter和setter的最佳方法是什么?

  •  11
  • Kennethvr  · 技术社区  · 16 年前

    我经常创建一个有一些私有变量的类。 设置此类的实例时,应该可以用getter和setter填充类的所有变量。

    有没有一种简单的方法可以做到这一点,而不必在创建类时为每个变量键入所有这些setter和getter?

    现在我必须为类中的每个var输入这个值

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

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

    我们现在使用regexp,但我不知道这是否是最简单的方法… 我们使用Eclipse作为环境,所以可能有一些有用的插件?

    5 回复  |  直到 15 年前
        1
  •  33
  •   erisco    15 年前

    使用Eclipse,转到Preferences->php->Editor->Templates->New,然后使用类似以下内容:

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

    若要使用模板类型,请键入其名称,然后按ctrl+space-键入名称时,还应自动显示上下文菜单。

        2
  •  2
  •   Andreas    16 年前

    你有没有看过“设置”和“获取”方法?不知道这是否是您的意思,但只要设置或检索/获取/访问类成员,就会自动调用。

        3
  •  1
  •   Vladislav Rastrusny    16 年前

    Zend Studio具有自动生成getter/setter的功能。

        4
  •  1
  •   RobertPitt    15 年前

    我认为最好的方法是使用uu-set和uuu-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;
            }
        }
    }
    

    方法将允许您使用如下函数进行设置:

    $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');
    

    这里还有很多工作要做

        5
  •  0
  •   Pawka    16 年前

    也许更好的解决方法:

    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”方法,但是它们速度很慢。

    推荐文章