2017-03-26 1 views
-1

저는 PHP를 처음 접했고 클래스 변수를 다른 클래스의 새 인스턴스로 설정하여 동일한 문제가 발생하는지 궁금합니다 클래스를 첫 번째 클래스로 사용합니다. 기본적으로 두 클래스 A와 B가있는 경우 두 클래스 모두 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에서 두 번 기본 클래스에 약식을하고, 실제로 log() 함수를 호출하기 위해 노력할 것 기본 두 가지 다른 방법?

+0

현실 세계에서이 작업을 수행하려면 어떻게해야합니까? 이것은 라인이 작성되기 전에 빈약 한 구현의 냄새가 난다. – Trent

+0

@Trent 나는 집에있는 라우터로부터 데이터를 요청하는 클래스를 가지고있다. 이 라우터 클래스가 "공통"기능을 포함하는 Base 클래스를 확장하고 싶습니다. 그런 다음 다른 클래스가 있습니다. 우리는 "NetworkInfo"라고 부를 것이고, 라우터에서 가져온 데이터를 파싱하고 데이터베이스 테이블에 데이터를로드합니다. 나는 또한 데이터베이스 것들을 관리하기위한 클래스를 가지고있다. 데이터베이스 클래스와 라우터 클래스 모두 Base 클래스를 확장하고 싶습니다. NetworkInfo 클래스는 Router 클래스를 확장하지만 Database 클래스의 함수에도 액세스 할 수 있어야합니다. – Josh2566

+0

생각한 패턴을 계속 사용하지 말 것을 강력히 권장합니다. 이것은 SOLID 소프트웨어 설계 원리를 이해하는 데 도움이되는 훌륭한 기사입니다. 응용 프로그램이 https://scotch.io/bar-talk/solid-the-first-five-principles-of-object-oriented에서 벗어나는 것처럼 들립니다. - 디자인 - 나는 이것이 당신의 질문에 어떤 식 으로든 답하는 것을 압니다. 그러나 질문하는 것은 잘못된 질문이며이 방법으로 소프트웨어를 계속 설계하도록 권장하는 것은 도움이되지 않습니다. – Trent

답변

0

생각한 패턴을 계속 사용하지 않는 것이 좋습니다. 이것은이 응용 프로그램처럼 들린다있는 SOLID 소프트웨어 설계 원리를 이해하는 데 도움이 훌륭한 문서는 https://scotch.io/bar-talk/s-o-l-i-d-the-first-five-principles-of-object-oriented-design

에서 벗어나고입니다

나는 결코 이것을 알고 귀하의 질문에 대한 대답; 그러나 질문하는 것은 잘못된 질문이며이 방법으로 소프트웨어를 계속 설계하도록 권장하는 것은 도움이되지 않습니다.