其他語言的便捷功能之一是可以爲屬性創建get和set方法。在試圖找到複製的PHP此功能的好方法,我偶然發現了這一點:http://www.php.net/manual/en/language.oop5.magic.php#98442具有get/set函數的PHP屬性
這裏是我的那個類的故障:
<?php
class ObjectWithGetSetProperties {
public function __get($varName) {
if (method_exists($this,$MethodName='get_'.$varName)) {
return $this->$MethodName();
} else {
trigger_error($varName.' is not avaliable .',E_USER_ERROR);
}
}
public function __set($varName,$value) {
if (method_exists($this,$MethodName='set_'.$varName)) {
return $this->$MethodName($value);
} else {
trigger_error($varName.' is not avaliable .',E_USER_ERROR);
}
}
}
?>
我的計劃是擴展這個類,並定義適當的get_someproperty()
和set_someproperty()
這個擴展類。
<?php
class SomeNewClass extends ObjectWithGetSetProperties {
protected $_someproperty;
public function get_someproperty() {
return $this->_someproperty;
}
}
?>
麻煩的是,基類的ObjectWithGetSetProperties
是無法看到我的方法get_someproperty()
在SomeNewClass
。我總是得到錯誤,「鑰匙不可用」。
有沒有什麼辦法解決這個問題,允許基類ObjectWithGetSetProperties
工作,或者我將不得不在每個類中創建這些__get()
和__set()
魔法方法?
類似什麼,我試圖完成,但並不完全:http://stackoverflow.com/questions/ 3479036/emulate-public-private-properties-with-get-and-set – Brad 2011-02-07 17:06:14
不要詆譭你的問題(這是一個明智的API目標),但請考慮[爲什麼getter和setter方法是邪惡的](http://www.javaworld .com/javaworld/jw-09-2003/jw-0905-toolbox.html)。 (有趣的閱讀,即使不適用) – mario 2011-02-07 17:14:16
@mario,我會在另一天更深入地閱讀它,但我不認爲這篇文章中的論點適用於我正在建造的那類課程。我正在建立一個類來表示數據。事實上,它會做的很少。它的主要目的是在現實世界中用一系列屬性來表示某些東西。無論如何,我稍後會更詳細地閱讀該文章,也許在SO上發佈一個新的問題。 – Brad 2011-02-07 17:20:51