当前位置:  开发笔记 > 编程语言 > 正文

类可以扩展类并实现接口

如何解决《类可以扩展类并实现接口》经验,为你挑选了2个好方法。

类可以扩展PHP中的接口和另一个类吗?
基本上我想这样做:

interface databaseInterface{
 public function query($q);
 public function escape($s);
 //more methods
}

class database{ //extends both mysqli and implements databaseInterface
 //etc.
}

如何做到这一点,只需做:

class database implements databaseInterface extends mysqli{ 

导致致命错误:

Parse error: syntax error, unexpected T_EXTENDS, expecting '{' in *file* on line *line*

Simon Lehman.. 160

反过来试试:

class database extends mysqli implements databaseInterface { ...}

这应该工作.



1> Simon Lehman..:

反过来试试:

class database extends mysqli implements databaseInterface { ...}

这应该工作.


由于您只能继承一个类,并且可以实现任意数量的接口,因此它可能是一种语法糖.另外,请记住,如果您的子类实现了任何接口,那么它们也会显示在已实现方法的列表中.所以把它们放在那个顺序是有道理的.

2> Michał Rudni..:

是的,它可以.您只需要保留正确的订单.

class database extends mysqli implements databaseInterface { ... }

而且,一个类可以实现多个接口.用逗号分隔'em.

但是,我觉得有必要警告你,扩展mysqli课程是一个非常糟糕的主意.继承本身可能是面向对象编程中最被高估和误用的概念.

相反,我建议使用mysqli方式(或PDO方式)执行db相关的东西.

另外,这是一个小问题,但命名惯例很重要.你的课程database看起来更加通用mysqli,因此它表明后者继承database而不是循环.


首先,因为它不是你的.当mysqli家伙决定改变某些子类时,其行为也会发生变化.其次,继承用于SPECIALIZE,而不是具有额外功能的EXTEND.这是OOP中最容易被误解的东西.根据经验,我倾向于只扩展抽象类.
我熟悉适配器模式.我只是说,如果方法名称更改或已弃用,您仍需要在两种方案中更改代码.虽然我同意在这种情况下非多态方法更好,但我并不认为适配器会"免疫"改变.
您只需要更改适配器代码,而不是所有使用该代码的地方.使用组合,无论如何都可以提供兼容性层,而对于继承,您最多可以将其称为hack.并且,我认为,适配器将提供更好的免疫力.
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有