-1
我很难找到任何指南,所以我想我会问这里。在php类中迭代受保护的变量
我有对象,那些对象都有保护变量。这些变量是受保护的,因为我希望它们可读,但只有其中一些是可写的,我想在它们设置时过滤它们。要做到这一点,我创建了下面的类,从适合这种设计的所有其他类扩展:
abstract class UnitObject{
protected $setables = [];
abstract public function filter($value);
public function __set($name, $value)
{
if (in_array($name, $this->setables)) {
$this->{$name} = $this->filter($value);
} else {
/*
* Log something
*/
}
}
public function __get($name)
{
return $this->{$name};
}
}
现在,这是实现期望的结果。然而,我想要通过foreach循环访问这些受保护的变量来遍历对象的属性。由于它们在传统意义上不“可见”,所以默认代码似乎不适用于此。经过一番研究后,我发现我可以实现迭代器来完成这样的事情,但所有的例子都是在特定对象上实现的。
我的目标是实现对我的“UnitObject”我的孩子继承迭代器,所以他们将财产通过对象的所有变量旋转当使用foreach循环写入所需的方法。所以我的问题如下:
- 是否正在实现迭代器最好的技术来解决这个问题?
- 是否可以使用实现Iterator的抽象父类,并让该类包含所需的函数,还是需要为每个特定对象创建所需的函数?
- 最后,如果可能的话,你能否提供一个例子,或者指引我有一个很好的例子吗?
谢谢!
只是箱子正确制定者就像一个长大了,而不是滥用复杂的黑洞,是魔'__set'和'__get'。另外,后缀“object”是.. emm ...可疑的选择。 –
问问自己,你是否真的需要**这种复杂性。为什么不只是有一个函数以数组的形式返回变量? – ryantxr
感谢您的反馈,不幸的是,此功能是必需的。这是为更大的系统开发的框架的一部分。使用魔术函数可以控制范围,而无需为几百个不同的变量编写getter和setter。 – cast2022