Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 一种方法中的setter/getter_Php_Oop_Setter_Getter - Fatal编程技术网

Php 一种方法中的setter/getter

Php 一种方法中的setter/getter,php,oop,setter,getter,Php,Oop,Setter,Getter,只是一个想法: 示例(在PHP中): 要设置名称,请执行以下操作: $object->name('name'); 要获取名称,请执行以下操作: $object->name() 如果没有参数:该方法用作getter,否则用作setter。对于简单的getter/setter。愚蠢,不管怎样,也许 编辑:跟进答案:我不太喜欢获取和设置,因为我更喜欢界面尽可能清晰。当只有几处房产时,这也太过分了。所以我想把它缩小到带有两个显式getter/setter的类/对象。问题是很难理解。我更愿意使用PHP5的

只是一个想法:

示例(在PHP中): 要设置名称,请执行以下操作: $object->name('name'); 要获取名称,请执行以下操作: $object->name()

如果没有参数:该方法用作getter,否则用作setter。对于简单的getter/setter。愚蠢,不管怎样,也许


编辑:跟进答案:我不太喜欢获取和设置,因为我更喜欢界面尽可能清晰。当只有几处房产时,这也太过分了。所以我想把它缩小到带有两个显式getter/setter的类/对象。

问题是很难理解。我更愿意使用PHP5的get和set,这样获取和设置变量就更自然了,每个人都会确切地知道我在做什么。即:

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. 类myClass { 函数获取($name) { 返回$this->array[$name]; } 函数集($name,$value) { $this->array[$name]=$value; } 函数打印() { echo$this->array['test']; } } $obj=新的myClass; $obj->test=“Hi”; echo$obj->test//你好。 $obj->print()//你好。
问题是这很难理解。我更愿意使用PHP5的get和set,这样获取和设置变量就更自然了,每个人都会确切地知道我在做什么。即:

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. 类myClass { 函数获取($name) { 返回$this->array[$name]; } 函数集($name,$value) { $this->array[$name]=$value; } 函数打印() { echo$this->array['test']; } } $obj=新的myClass; $obj->test=“Hi”; echo$obj->test//你好。 $obj->print()//你好。
当然,如果在应用程序中有意义的话,您可以这样做,否则我将只使用已经为您设置的标准getter/setter。您的函数可以如下所示:

public function name($val = null)
{
  if (is_null($val))
  {
    return $this->name;
  }
  else
  {
    $this->name = $val;
  }
}

当然,如果在应用程序中有意义的话,您可以这样做,否则我将只使用已经为您设置的标准getter/setter。您的函数可以如下所示:

public function name($val = null)
{
  if (is_null($val))
  {
    return $this->name;
  }
  else
  {
    $this->name = $val;
  }
}

可以使用_call()魔术方法来完成

class Test {
    public function __call($name, array $args) {
        $variable =& $this->$name;
        if(!empty($args)) {
            $variable = $args[0];
        }
        return $variable;
    }
}

可以使用_call()魔术方法来完成

class Test {
    public function __call($name, array $args) {
        $variable =& $this->$name;
        if(!empty($args)) {
            $variable = $args[0];
        }
        return $variable;
    }
}

您是否有意返回集合的属性?可能是为了简洁,但可能是一个很好的副作用,特别是如果您在其中添加了一些内容来限制可以添加的变量。是否有意返回集合的属性?可能是为了简洁,但可能是一个很好的副作用,特别是如果你在里面放了一些东西来限制可以添加哪些变量。如果你希望接口尽可能明确,为什么你甚至考虑让一个方法根据传递给它的内容来做两件不同的事情?好问题。我希望在面对它时,这个想法会变得清晰。虽然没有setX/getX那么清晰,但足够用一点清晰来换取一个不那么杂乱的接口。我尝试了许多不同的方法,使用与class属性同名的函数是我最喜欢的<代码>\uuu get和
\uu set
使调用代码变得漂亮,但类代码有点难看。
$obj->property
$obj->property()
之间没有太大区别。如果您希望接口尽可能明确,为什么您甚至考虑使用一个方法根据传递给它的内容执行两种不同的操作?好问题。我希望在面对它时,这个想法会变得清晰。虽然没有setX/getX那么清晰,但足够用一点清晰来换取一个不那么杂乱的接口。我尝试了许多不同的方法,使用与class属性同名的函数是我最喜欢的<代码>\uuu get和
\uu set
使调用代码变得漂亮,但类代码有点难看。
$obj->property
$obj->property()
之间没有太大的区别。我不是downvoter,但我想指出,这种组合getter/setter不允许您将相关属性设置为NULL。我不是downvoter,但我想指出,这种组合getter/setter不允许您将相关属性设置为NULL。