gpt4 book ai didi

php - 如何使用流畅的接口(interface)对所有数据成员变量调用相同的方法

转载 作者:搜寻专家 更新时间:2023-10-31 21:53:40 26 4
gpt4 key购买 nike

我有这样一个类:

class example{

private $foo = array();
private $bar = array();

public function getFoo(){
return $this->foo;
}

public function getBar(){
return $this->bar;
}

//for example
public function doSomth(array $smth){
// do somth on $smth
return $smth;
}
}

我希望能够定义一个适用于我的类的所有数据成员的方法,它们具有数组类型,如下所示:

$exmpl = new Example();
$exmpl->getFoo()->doSmth();
//or
$exmpl->getBar()->doSmth();

我该怎么办?

最佳答案

不是直接返回$this->foo$this->bar,而是返回一个获取数据并具有doSmth 的对象> 方法,例如:

class example{
private $foo = array();
private $bar = array();

public function getFoo(){
return new dosmth($this->foo);
}

public function getBar(){
return new dosmth($this->bar);
}
}

class dosmth {
public function __construct(array $smth) {
$this->smth = $smth;
}
public function doSmth() {
echo 'do something on $this->smth';
return $this->smth;
}
private $smth;
}

$exmpl = new Example();
$exmpl->getFoo()->doSmth();
$exmpl->getBar()->doSmth();

另见 Fluent Interface .

虽然这似乎可以解决所述问题,但我提醒您可能有更好的设计方法。具体来说,让“example”纯粹是一个数据容器,带有“foo”和“bar”的访问器方法,让“dosmth”成为你根据需要实例化和调用的辅助类。这将是一个等效的 API 调用,它只是稍微多了一些输入,但在类之间明确区分了关注点:

$helper = new dosmth;
$exmpl = new example;
$helper->doSmth($exmpl->getFoo());
$helper->doSmth($exmpl->getBar());

流畅的界面是一首警笛。在有用的地方使用它们,但不要仅仅因为可以就实现它们。

关于php - 如何使用流畅的接口(interface)对所有数据成员变量调用相同的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36263482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com