2013-04-17 4 views
0

가끔은 여러 가지 서로 다른 관련 작업을 수행하는 경우가 종종 있습니다. 예를 들어 "서적", "영화"및 "노래"가있을 수 있으며 클라이언트의 메모 텍스트를 가져 와서 데이터베이스에 추가하고 적절한 부모 레코드와 연관시키는 "addNote"작업을 할 수 있습니다 , 일부 데이터를 클라이언트에 리턴합니다. 아래에 표시된대로 구현했습니다. 작동하는 동안 그것은 잘못되었습니다. 이것을 할 수있는 더 좋은 방법이 있습니까? 그렇다면 어떻게해야합니까? 감사합니다.하위 클래스 호출 상위 클래스가있는 경우

class parentClass 
{ 
    protected function someTask($table) 
    { 
     //do the task which is common to child1/2/3Class using $table 
    } 
} 

class child1Class extends parentClass 
{ 
    public function someTask($dummy=NULL){parent::someTask('class1_table');} 
} 
class child2Class extends parentClass 
{ 
    public function someTask($dummy=NULL){parent::someTask('class2_table');} 
} 
class child3Class extends parentClass 
{ 
    public function someTask($dummy=NULL){parent::someTask('class3_table');} 
} 

$ajax=new child1Class(); //specific childClass based on MVC 
$ajax->someTask(); 
+0

왜 잘못 보입니까? 꽤 괜찮은 것 같습니다. 특별히 성가 시게하는 것이 있습니까? – raidenace

+0

@Raidenace 나는 거꾸로 보인다. 일반적으로, 나는 자식으로부터 객체를 생성하고, 그것과 함께 부모 기능을 가져온다. – user1032531

답변

0

올바른 방법입니다. 당신이 가지고있는 유일한 옵션은

class parentClass 
{ 
    public function someTask($table) 
    { 
     echo "hello " . $table; 
    } 
} 

class child1Class extends parentClass 
{ 
    // no needed method here 
} 
class child2Class extends parentClass 
{ 
    // no needed method here 
} 

$obj1 = new child1Class(); 
$obj1->someTask('class1_table'); 
$obj2 = new child1Class(); 
$obj2->someTask('class2_table'); 
$obj3 = new child2Class(); 
$obj3->someTask('class3_table'); 

result with obj1: "hello class1_table" 
result with obj2: "hello class2_table" 
result with obj3: "hello class3_table" 
  • 공공는 개체를 통해 방법은 직접 액세스 할 수 있습니다 "공개"부모 방법을하고 있습니다.
  • Protected는 자식 클래스를 통해이 메서드에 액세스 할 수있게합니다.
  • Private 메서드는 자체 클래스를 통해서만 메서드에 액세스 할 수있게합니다.
+0

각 자식은 parent :: someTask()를 약간 다른 방식으로 구현해야합니다. 이 방법은 그렇게하지 않습니다. – user1032531

+0

예, 이제 그렇게 할 것입니다. 최초로 childClass를 작성해, 그 메소드를 기동하는 어플리케이션에는, 파라미터를 추가 할 수 없습니다. – user1032531

+0

개체를 만들고 해당 매개 변수를 사용하여 해당 개체의 메서드를 호출합니다. 그것은 작동해야합니다. 다른 상황을 반영하기 위해 예제를 약간 수정했습니다. 이제는 동일한 결과를 얻으려면 하나의 하위 클래스 만 있으면됩니다. – Daniel

관련 문제