什么是自动生成的PHP类的getter和setter的最佳途径?(What is the best

2019-08-16 20:38发布

我经常创建具有一些私有变量的类。 当这个类的一个实例设置,应该可以填补类的所有变量与getter和setter。

有一个简单的方法来做到这一点,而不必键入这些getter和setter方法对创建类的每个变量?

现在我要为类中的每个变种键入此

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

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

我们现在使用正则表达式,但我不知道这是最简单的方法......我们使用Eclipse环境,所以可能有一些有用的插件?

Answer 1:

与Eclipse去首选项 - > PHP - >编辑 - >模板 - >新建,使用这样的:

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

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

要使用该模板类型它的名称,然后按Ctrl +空格键 - 上下文菜单也应该自动当你键入的名字出现。



Answer 2:

你看在__set和__get方法呢? 不知道如果这是你的意思,但每当类成员设置或检索/取指/访问被自动调用。



Answer 3:

Zend Studio的具有自动的getter / setter产生的一个特征。



Answer 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设置/获取并检查字符串作为类的值的其余部分:)

另一个例子

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

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

//....

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

那里有更多的工作在这里完成



Answer 5:

也许更好的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;
    }
}

而简单地扩展这个类。 或者,你也可以使用__set和__get方法,但它们都相当慢。



文章来源: What is the best way to auto generate getters and setters for a class in php?