-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