Home  >  Article  >  Backend Development  >  oop - PHP 类对象这样相互继承 extends 是否是错误的?(相互继承)

oop - PHP 类对象这样相互继承 extends 是否是错误的?(相互继承)

WBOY
WBOYOriginal
2016-06-06 20:43:211009browse

<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()既然可以允许静态方法调用,完全可以放到类外面去单独封装

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn