【发布时间】:2014-09-15 01:57:54
【问题描述】:
我想创建一个函数来填充对象的属性,一些属性将在多个继承类之间共享,但一些属性将特定于继承类。我想处理来自父类的共享属性和来自继承类的特定于变体的属性。 (即在孩子中做特定的事情,然后为共享的事情调用 parent::populateStuff())
我没有返回重新散列所有变量名称,而是希望使用 get_class_vars 或 get_object_vars 来获取要填充的属性的名称。但是,当您运行 get_object_vars($this) 时,无论在哪个级别调用它,您都会获得“所有”继承变量(父变量和继承变量)。如果我用 get_class_vars 调用特定的类名,我可以获得仅限父级的东西,但我无法看到在继承类中添加或覆盖的内容。我也不想在代码中放置静态类名,因为它在重构时会降低可移植性。
我确实发现我可以在父级中运行 get_parent_class($this) 并且有效,但似乎是获取本地类名的一种迂回方式。 (get_class(self) puked) 但至少这在父级有效。
所以我的问题是,有没有更好的方法来获取抽象层类变量或类名? 有没有更好的方法来获得继承的唯一属性? (我可以与父变量进行数组拼接,但这会排除任何被覆盖的内容)
【问题讨论】:
-
我应该补充一点,属性是从每个变体中的两个[或更多]数据库表/查询中填充的。一种特定于抽象属性,另一种特定于继承的类属性。因此,就价值而言,它[几乎] 是一对一的。我可以从 db 行返回,但有些表的 id 用于交叉引用/链接,我在类中不需要,有些变体确实覆盖了第一个表中的值。
-
duh - 好的,第一个问题是脑子放屁 - __CLASS__ 让我得到了我想要的。 ReflectionClass 为我提供了任何给定级别的设置信息,我现在将使用它,但我仍然很好奇是否有其他方法不使用 ReflectionClass
标签: php inheritance properties