其他语言的便捷功能之一是可以为属性创建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