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

WBOY
풀어 주다: 2016-06-06 20:43:21
원래의
1010명이 탐색했습니다.

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿