2017-10-29 5 views
0

このようなこのサブクラス構造がPHPで可能かどうかは疑問です。これが重複している場合、私はこのプロセスが呼び出されることを理解することができず、私が見つけることができる唯一の答えは無回答の閉じた質問でした。PHP OOPクラス構造化

私は複数のクラスで作業しています。たとえば、MainUserとします。

Mainクラスはすべての開始コードを保持します。だから、

class Main{ 
    //Setters for core variables and data needed to make calls 
    ... 
    protected function fetchInfo(){ 
     //Do Stuff to return info from other source(Curl calls in my case) 
    } 

} 

User

class User extends Main{ 
    public function getName(){ 
     $data = $this->fetchInfo(); 
     return $data['name']; 
    } 
} 

しかし、その代わりにどこ私は希望を持ちます。 $exampe1 = new Main(...);を使用してください。$example2 = new User();$example2->getName();のサブクラスを呼び出して$example = new Main();のような処理を行い、必要に応じてサブクラスを呼び出すことができます$example->User->getName();

これは扱うことができるさまざまな方法があることは知っていますが、私は組織のためにクラスを別にしたいと思います。私はそのメインクラスから情報を引き出す必要がある多くのサブクラスを用意しています。彼らはそのような方法でリンクすることができる方法があります。

EDIT:関数を取得するためにUser呼び出しを呼び出す必要はありません。戻り値のデータを別に処理する15以上のクラスがあり、新しいObjectを作成するよりも優れた方法があれば驚くでしょう。私がそれを使いたいならば、それぞれのために。

+0

ユーザーはメインについてはすべて知っていますが、メインについては何も知っていません - 言い換えれば、 'getName'を呼び出すために' User'を使用する必要はありませんが、なぜそれが問題になるのかわかりません – nogad

+0

壊れた問題。その唯一の私は最終的に15以上のクラスを持っていて、そうする方法があるかどうか疑問に思っていました。クラスのさまざまな部分から引っ張ってこのクラスを意味することを示すためにこのピースを単純に付け加えることを宣言しません。 – bigbaddevil7

+0

'User'を呼び出すか、' Main'を呼び出す上で正しいアプローチであることは何でも構いません。 – nogad

答えて

1

「メイン」は「ユーザー」ではないので、このタイプのサブクラス化は貧しい選択です。

私は代わりに注射を見るかもしれません。

class MainDataHandler { 
    //... 
} 

class User { 

    private $main; 

    public function __construct(MainDataHandler $main) { 
    $this->main = $main; 
    } 

    public function getName() { 
    return $this->main->getData('name'); 
    } 
} 

注入の利点は、クラスが動作し、別のクラスに依存せずに独立してテストできるということです。また、 "Main"が変わった場合、Userクラスは新しいMainがどのように動作するかに依存しません。

+0

Yea 'Main'クラスは単なるコアデータ処理であり、サブクラスはデータを渡すクラスを構成します受け取った。だからユーザー、アカウント、ゲーム、チーム。それらはすべて同じデータロケーションから引き出されます。 'User'クラスは、あなたがこれに関するユーザ情報を引き出すべきかどうかを言うだけです。 Game Dataを引っ張りたい場合は、代わりに 'Game'クラスをタックしてください。 – bigbaddevil7

+0

また、メイン(気絶!)をシングルトンにして、注入なしでそのように参照することもできます.... –