【发布时间】:2013-11-13 17:24:34
【问题描述】:
我正在为我的父类创建全局 setter 和 getter,因为我不想为每个子类变量创建它们(但我偶尔会覆盖父全局 setter/getter)。
我正在使用 __call 并且我正在解析方法名称,如下所示:
if (strtolower(substr($method, 0, 3)) == "set") {
$variable = strtolower(substr($method, 3));
}
问题是如何检查 $variable 是否为子类(扩展主类)设置;
如果我这样做:
if ($this->$variable)
我想它首先检查它是否存在于子类中,然后它检查它是否存在于主类中。我只希望它检查子类,可以这样做吗?
我知道有 parent:: 但是有没有 child 的等价物?
编辑: 人们不明白我在问什么。 我知道如何检查该属性是否存在。我想知道的是如何检查 CHILD 类的属性是否存在,而不是 MAIN 类。 (CHILD 类扩展 MAIN)
【问题讨论】:
-
也许我遗漏了一些东西,但我不明白你为什么使用
__call方法。如果你的代码是正确的面向对象的,你就不需要求助于这种奇特的解决方案。 -
我有数百个属性,我不想在我的类中填充:setThis、setThat、setThose、setThem(get 也一样)。我只想在它们执行其他操作而不是设置或获取数据(例如清理)时创建这些函数。
-
这个问题可以通过其他类继承的一个抽象类来解决。另一个好处是合同变得清晰。有了
__call,一切都变得神奇了。 -
什么意思?你能给我举个例子吗。听起来很有趣!
-
如果您可以提供一些示例类来描述您的情况以及您打算如何使用它们,那么可以创建一个示例。