2017-03-26 4 views
-1

私はPHPをかなり使い慣れていますし、クラス変数を別のクラスの新しいインスタンスとして設定し、最初のクラスとしてクラス。基本的に、AとBの2つのクラスがある場合、どちらもBaseクラスを拡張します。 Aを拡張し、Bの新しいインスタンスを作成するクラスCを作成できますか?私はこのような何かをしたいと思います:PHPクラスを拡張して同じベースを持つ別のクラスを使用する

// In its own file (BaseClass.php) 
    class Base { 
     public function log($message) { 
      // Write $message to the log 
     } 
    } 

// In its own file (ClassA.php) 
    require_once("path/to/BaseClass.php"); 
    class A extends Base { 
     public function test() { 
      // Do some test 
     } 
    } 

// In its own file (ClassB.php) 
    require_once("path/to/BaseClass.php"); 
    class B extends Base { 
     public function getData() { 
      // Get data here 
     } 
    } 

// In its own file (ClassC.php) 
    require_once("path/to/ClassA.php"); 
    require_once("path/to/ClassB.php"); 
    class C extends A { 
     protected $classB; 

     public function run() { 
      // Initialize an instance of class B 
      $this->classB = new B; 

      // Can call log() function of Base class because 
      // class C extends class A which extends Base 
      $this->log("Log Message"); 

      // Can also call log() function of Base class through 
      // class B because class B extends Base 
      $this->classB->log("Another Log Message"); 
     } 
    } 
    $classC = new C; 
    $classC->run(); 

は同じクラスC以内に2回基底クラスを仮調印(私はそれを理解する方法から)のいずれかの競合はあるのでしょう、そして、それは実際にlog()関数を呼び出すために動作しますベースの2つの異なる方法?

+0

実際にこれを行うにはどうすればよいですか?これは、行が書き込まれる前に貧弱な実装のにおいをします。 – Trent

+0

@Trent私は私の家のルータからデータを要求するクラスを持っています。私は、このルータクラスがいくつかの "共通の"機能を含むベースクラスを拡張したいと思います。それから私は別のクラスを持っています - 私はそれを "NetworkInfo"と呼ぶでしょう - 私のルータから取り出されたデータを解析し、データをデータベーステーブルにロードします。私はまた、データベースのものを管理するためのクラスを持っています。データベースクラスとルータクラスの両方でBaseクラスを拡張したいと思います。 NetworkInfoクラスはRouterクラスを拡張しますが、Databaseクラスの関数にもアクセスできる必要があります。 – Josh2566

+0

思いついたパターンを続行しないことを強くお勧めします。これは、あなたのアプリケーションがhttps://scotch.io/bar-talk/solid-the-first-five-principles-of-object-orientedから迷子になっているような、SOLIDソフトウェア設計の原則を理解するのに役立つすばらしい記事です。 -design - 私はこれがあなたの質問に決して答えないことを知っています。質問するのは間違った質問です。このようにソフトウェアを設計し続けることを奨励することは役に立ちません。 – Trent

答えて

0

思いついたパターンを続行しないことを強くお勧めします。これは、それはあなたのアプリケーションのように聞こえるそのSOLIDソフトウェア設計の原則を、理解するのに役立ちます素晴らしい記事がhttps://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design

を逸脱され

私は決してこれを知っているが、あなたの質問に答えます。質問するのは間違った質問です。このようにソフトウェアを設計し続けることを奨励することは役に立ちません。

関連する問題