Q
多层次继承
1
A
回答
1
我最初的想法是,这可能不是很好的继承,但测试后似乎没有问题。但是,还有其他方法可以实现这一点,您可能会意识到这一点。
抽象类或接口可能是有意义的。
抽象类就像其他类一样,但它们不能被实例化。也有抽象的方法必须由具体的类来实现。
abstract class A {
//You can also have abstract methods
abstract public function doFoo();
abstract public function doBar($when);
//Also implemented method which when
//called unless overridden will use this logic
public function sayHi(){
echo "hi";
}
}
现在,这个类可以选择实现抽象方法,也可以不添加任何进一步需要的逻辑。
abstract class B extends A {
public function doFoo(){
//Some code
}
abstract public function doFooBar();
public function sayBye(){
echo "bye";
}
}
这是一个具体的类和所有的抽象方法必须在这里实现,如果不是已经被执行者可以再次覆盖。
class C extends B {
public function doFoo(){
//Some different code
}
public function doBar($when){
//Some code
}
public function doFooBar(){
//Some code
}
//do not need sayHi() and sayBye() but they will be available.
}
接口在一个简单而粗糙的方式是一袋方法。你只是告诉开发人员你是否要使用这些实现这些。这些方法没有被声明为抽象的,但不能在接口中实现。
interface iA {
public function doFoo();
public function doBar();
}
一个接口可以由其它接口,其只是加入更多的方法来接口
interface iB extends iA {
public function doFooBar();
}
interface iC {
public function doAnything();
}
而且
class A implements iA{
public function doFoo(){
//Some Code
}
public function doBar(){
//Some Code
}
}
class B implements iB{
public function doFoo(){
//Some Code
}
public function doBar(){
//Some Code
}
public function doFooBar(){
//Some Code
}
}
增加的优点的接口由类实现的扩展是一个类或摘要可以实现多于一个
abstract class C implements iA, iC {
public function doFoo(){
//Some Code
}
}
class D extends C {
//get doFoo() from C implementation and must implement the remaining...
public function doBar(){
//Some Code
}
public function doAnything(){
//Some Code
}
}
0
这似乎完全正常。 PHP只支持单继承 - 所以你只能从一个类继承。 如果您需要班级中的更多功能,但无法获得父级班级的功能,您还可以考虑使用traits。性状尝试解决单遗传问题 - 即使它本身不是问题。
如果你正确地构建你的类,你会得到一个很好的继承链,这对Apache/Nginx没有任何不良影响。
相关问题
- 1. Doctrine2多层次继承
- 2. 多重继承层次
- 3. 层次继承
- 4. C++继承层次结构
- 5. 多个抽象类的多层次继承
- 6. 为什么多层次,多继承在asp.net
- 7. 分层继承
- 8. Hibernate进行多层次的混合继承策略层次结构
- 9. 并行继承层次结构重构
- 10. 为什么System.Decimal继承层次
- 11. 映射JPA实体继承层次
- 12. Spring MVC的 - 对于继承层次
- 13. C#继承 - >的类层次结构
- 14. UrlClassLoader委托和继承层次结构
- 15. 模板类层次的朋友继承
- 16. 表每层次和继承关系
- 17. 类表继承与层次结构
- 18. C++中继承的类层次
- 19. C#类Quadrilateral的继承层次结构?
- 20. 调用不同类的继承层次
- 21. PostSharp和方面继承通过层次
- 22. 从SQLAlchemy子类继承层次结构
- 23. Dagger 2:依赖继承层次
- 24. Neo4j javadocs继承层次结构
- 25. 类继承层次的设计问题
- 26. 继承中的循环层次结构
- 27. 可以解析继承处理继承的多个图层吗?
- 28. C#,EF,多层次的继承,数据将不会加载
- 29. 的has_many多层次结构和单表继承
- 30. Rails的STI,多层次的继承查询
对我来说似乎很好,但这个例子非常狭窄。 –
我可能不会担心性能的影响,除非你进入更深的嵌套(阅读:不现实的)继承,或者你的类的内容非常密集。如果您的应用程序的设计需要(即)20个级别的继承,那就这样吧。根据您的需求,它最终可能是可维护性/可读性和性能之间的折衷。 –
谁说这是一个不好的做法? (你能链接一些来源吗?) –