2013-04-17 107 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" 
  • 公共使得該方法通過對象直接訪問。
  • 受保護使得該方法可通過子類訪問
  • Private使該方法只能通過其自己的類訪問。
+0

每個孩子都必須根據發送給它的$ table值稍微不同地實現parent :: someTask()。這種方式不這樣做。 – user1032531

+0

是的,現在它會這樣做。最初創建childClass並啓動該方法的應用程序不具有添加參數的功能。 – user1032531

+0

您創建對象並使用其自己的參數調用該對象上的方法。它應該工作。我稍微修改了這個例子以反映不同的情況。儘管您現在只需要一個孩子班就可以獲得相同的結果。 – Daniel