【发布时间】:2017-12-09 04:18:48
【问题描述】:
看完this question 我的问题的一个想法是在子类中实现该方法,例如:
class Child {
private $childField = "Want to see";
public $pubChildField = "Will see";
public function method()
{
$assoc = []; // a associative array
foreach ($this as $field => $value) {
$assoc[$field] = doStuff($value);
}
return $assoc;
}
}
var_dump((new Child())->jsonSerialize());
但是为此,我必须在每个子类中复制代码。为了可读性,我想将其重构为(已经存在的)parentClass,类似于:
abstract class parentClass {
public function method()
{
$assoc = []; // a associative array
foreach ($this as $field => $value) {
$assoc[$field] = doStuff($value);
}
return $assoc;
}
}
class Child extends parentClass {
private $childField;
public $pubChildField;
}
var_dump((new Child())->jsonSerialize());
foreach ($this as $k=>$v) 和 get_object_vars() 都将从实例中获取公共字段。我需要获取它的私有字段,以便进行序列化。
编辑 1:错字抽象方法 - 我在想什么
编辑 2:阐明示例
编辑 3:重新提出问题,因为似乎存在误解
【问题讨论】:
-
obviously $this refers to the abstract method.... 不!!!!$this指的是instance;$this从不引用一个类 -
詹森,你为什么要这样做?
-
这是 PHP 手册,其中包含 PHP 中的对象和类的基础知识:php.net/manual/en/language.oop5.basic.php。这里有更多关于对象继承的内容:php.net/manual/en/language.oop5.inheritance.php。我认为你应该仔细阅读它们。
-
你可以使用
get_object_vars(),但是,恕我直言,整个想法很糟糕,应该放弃。 -
基类不应该知道扩展它的类。它甚至不应该关心它是否被扩展。
标签: php oop inheritance iteration abstract-class