2017-03-26 28 views
-1

我對PHP相當陌生,並且想知道是否有任何問題會由於將另一個類的新實例設置爲另一個類的新實例而引起,而這又會擴展相同的基礎班級作爲第一堂課。基本上,如果我有兩個類,A和B,都擴展一個基類。我可以擁有擴展A的類C嗎?還可以創建B的新實例嗎?我願做這樣的事情: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(); 

是否會有任何衝突(從我如何理解它)草簽Base類兩次相同的C類之內,它確實能工作調用log()功能基地兩種不同的方式?

+0

你的真實世界需要做什麼?這是一個不好的實現的氣味之前,寫一條線 – Trent

+0

@Trent我有一個類從我的家庭路由器請求數據。我希望這個Router類擴展我的Base類,它將包含一些「通用」功能。然後我有另一個類 - 我們將其稱爲「NetworkInfo」 - 解析從我的路由器檢索到的數據,並將數據加載到數據庫表中。我還有一個管理數據庫事物的類。我希望數據庫和路由器類都擴展基類。 NetworkInfo類擴展了Router類,但也需要能夠訪問Database類的函數。 – Josh2566

+0

我強烈建議不要繼續你想象中的模式。這篇文章有助於理解SOLID軟件設計原則,這聽起來像是你的應用程序偏離了https://scotch.io/bar-talk/solid-the-first-five-principles-of-object-oriented - 設計 - 我知道這絕不會回答你的問題;但這是一個錯誤的問題,鼓勵您繼續以這種方式繼續設計軟件是沒有幫助的。 – Trent

回答

相關問題