2013-04-17 3 views
0

Иногда я иногда сталкиваюсь с аналогичной задачей по различным различным связанным вещам. Например, у меня могут быть «книги», «фильмы» и «песни», и у меня может быть задача «addNote», которая получает текст заметки от клиента, добавляет ее в базу данных, связывает ее с соответствующей родительской записью , и возвращает некоторые данные клиенту. Я реализовал его, как показано ниже, и пока он работает, это просто кажется неправильным. Есть ли лучший способ сделать это, и если да, то как? ThanksНаличие родительского вызова класса родительского класса

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" 
  • Public делает метод прямого доступа через объект.
  • Защищенный делает метод доступным через дочерний класс
  • Приватный делает метод доступным только через свой класс.
+0

Каждый ребенок должен реализовывать parent :: someTask() несколько иначе, в зависимости от присваиваемого ему значения $ table. Таким образом, это не так. – user1032531

+0

Да, теперь он это сделает. Приложение, которое изначально создает дочерний класс и инициирует этот метод, не имеет возможности добавить параметр. – user1032531

+0

Вы создаете объекты и вызываете метод на этом объекте со своим собственным параметром. Он должен работать. Я слегка приспособил этот пример, чтобы отразить разные ситуации. Хотя вам нужен только один дочерний класс, чтобы получить тот же результат. – Daniel

Смежные вопросы