2017-10-29 3 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) 
    } 

} 

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

User하지만 그 대신 어디 것을 갖는. $exampe1 = new Main(...);을 사용하여 바 라리 블을 설정하고 $example2 = new User();을 사용하여 서브 클래스를 호출하면 $example2->getName();$example = new Main();과 같은 작업을 수행하여 필요시 서브 클래스를 호출 할 수 있습니다. $example->User->getName();?

처리 할 수있는 여러 가지 방법이 있지만 조직을 위해 클래스를 분리하고 메인 클래스에서 정보를 가져와야하는 많은 하위 클래스가있을 경우이를 알고 싶습니다. if 그것들이 그 방식으로 연결될 수있는 방법이 있습니다.

편집 : 함수를 가져 오기 위해 사용자 호출을 호출하고 싶지 않은 이유는 반환 된 데이터를 다르게 처리하고 새로운 개체를 만드는 것보다 더 좋은 방법이 있는지 궁금하게 만드는 15 개 이상의 클래스를 갖게 될 것입니다. 내가 그것을 사용하고 싶다면 각각 하나씩.

+0

사용자는 주 정보를 모두 알고 있지만 주 정보는 사용자에 대해 아무 것도 모릅니다. 말하자면 '사용자'를 사용하여 'getName'을 호출해야하지만 그 이유는 알 수 없습니다. – nogad

+0

그렇습니다. 깨는 문제. 그것의 유일한 i는 결국 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

예'Main' 클래스는 핵심적인 데이터 처리이며 하위 클래스는 데이터를 전달하는 클래스를 구성합니다 받았습니다. 그래서 사용자, 계정, 게임, 팀. 그들은 모두 같은 데이터 위치에서 끌어옵니다. 'User' 클래스는 사용자 정보를 끌어 내기를 원한다면 말할 것입니다. Game Data를 잡아 당기고 싶다면 대신'Game' 클래스를 집어 넣으십시오. – bigbaddevil7

+0

또는 메인 (헐떡 거림!) 싱글 톤을 만들고 주사하지 않고 그런 식으로 참조하십시오 .... –