完成抽象类的常见做法是什么?

Den*_*ovs 5 php theory abstract-class class-design class

你有一个完全适合作为抽象的类,但如果没有派生类提供的数据,这个类就无法正常工作.将所有数据传递给构造函数并不方便,因为并非所有数据都可能需要,并且其中许多可以是动态的(来自子函数).

构成这种结构的最佳实践是什么?或者首先是一个糟糕的设计?

  1. 声明孩子必须实现的抽象函数?
  2. 声明在子类中重写的普通函数?

Ale*_*kov 1

如果该功能有一个可以在大多数儿童中依赖的合理默认行为,则可以将其作为正常行为来实现。否则(没有默认行为和/或大多数孩子必须覆盖它),最好将其声明为抽象。副作用是您永远不会忘记在子类中定义它,因为如果不这样做,将会立即报告。

另一个机会是使用特定于子类的数据的容器(例如,数组),但仍然需要进行一般检查或可以在共同祖先中完成的其他处理。通过这种方式,您可以定义一个保存数据的变量,但数据本身会填充到子项中。父类中的代码可以迭代此容器并对所有元素执行一些例行工作。