Home > Article > Backend Development > oop - PHP 类对象这样相互继承 extends 是否是错误的?(相互继承)
<code>/TxLibrary /txOraApi -oraBase.class.php -oraNews.class.php -oraPic.class.php /txWebApi -webBase.class.php -webNews.class.php -webPic.class.php /txWapApi -wapBase.class.php : class wapBase extends TxBase {} -wapNews.class.php : class wapNews extends wapBase {} -wapPic.class.php : class wapPic extends wapBase {} -TxBase.class.php : class TxBase {} -TxNews.class.php : class TxNews extends TxBase {} -TxPic.class.php : class TxPic extends TxBase {} </code>
这是我自己的思路,因为有三个接口,wap ora web。所以建立了三个类库文件夹。
但是基类 wapBase.class.php webBase.class.php oraBase.class.php 他们之间会都用到 TxBase.class.php 的方法。而TxNews.class.php 也可能会用到TxBase.class.php 的方法。所以
TxNews.class.php extends TxBase.class.php ,但是在TxNews.class.php 这样的类库方法,比如 getList() 方法,调用的 是oraNews::getList(),但是oraNews extends oraBase,而oraBase 又 extends TxBase。
<code>class TxNews extends TxBase { public function getList(){ return oraNews::getList(); } } class oraNews extends oraBase { public function getList(){ $param = array(); return parent::getData($param); } } class oraBase extends TxBase { public function getData(){ //curl post remote java web api to get Data return array(); } } </code>
这样继承是否是有问题,或者本身思路就是错误的。
<code>/TxLibrary /txOraApi -oraBase.class.php -oraNews.class.php -oraPic.class.php /txWebApi -webBase.class.php -webNews.class.php -webPic.class.php /txWapApi -wapBase.class.php : class wapBase extends TxBase {} -wapNews.class.php : class wapNews extends wapBase {} -wapPic.class.php : class wapPic extends wapBase {} -TxBase.class.php : class TxBase {} -TxNews.class.php : class TxNews extends TxBase {} -TxPic.class.php : class TxPic extends TxBase {} </code>
这是我自己的思路,因为有三个接口,wap ora web。所以建立了三个类库文件夹。
但是基类 wapBase.class.php webBase.class.php oraBase.class.php 他们之间会都用到 TxBase.class.php 的方法。而TxNews.class.php 也可能会用到TxBase.class.php 的方法。所以
TxNews.class.php extends TxBase.class.php ,但是在TxNews.class.php 这样的类库方法,比如 getList() 方法,调用的 是oraNews::getList(),但是oraNews extends oraBase,而oraBase 又 extends TxBase。
<code>class TxNews extends TxBase { public function getList(){ return oraNews::getList(); } } class oraNews extends oraBase { public function getList(){ $param = array(); return parent::getData($param); } } class oraBase extends TxBase { public function getData(){ //curl post remote java web api to get Data return array(); } } </code>
这样继承是否是有问题,或者本身思路就是错误的。
好绕的问题,先不管你这个对还是不对,如果你现在都这么不容易把问题理清楚,那过几年或者换了一个人,怎么维护这些代码呢?
我觉得即使能够运行,这个设计也不是好设计
如果这几个类都需要共用方法,继承不是唯一的实现方式,你可以把这些方法封装成无状态的helper,在这些类里分别使用即可
oraNews::getList()的写法说明getList()既然可以允许静态方法调用,完全可以放到类外面去单独封装