2016-04-20 53 views
0

假設我有兩個MY_Controller的子控制器,比如Child_1 & Child_2.In MY_Controller我有兩個方法method_1 & method_2作爲在codeigniter中如何從子控制器調用該方法時從父控制器中的方法獲取對子控制器的引用

abstract class MY_Controller extends CI_Controller 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    } 

    public abstract function method_1();//children will give custom implementation 

    public function method_2() 
    { 
    some code ... 
    /*Here I want to call method_1() of the child controller that have called this method i.e. method_2* automatically */ 
    } 
} 

我從child_1 & child_2使用電話method_2()

class Child_1 extends MY_Controller 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    } 

    public function method_1(){//custom implementation goes here} 

    public function some_method() 
    { 
    ...some code 
    $this->method_2();//call inherited method method_2() 
    } 
} 

爲child_2

+0

此代碼類似的代碼是正確的,你可以使用$這 - > method_2()調用調用父類的方法。但是,爲什麼在父類中調用孩子的方法,這與繼承是相反的。 – aeonsleo

回答

0
abstract class MY_Controller extends CI_Controller 
{ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    public abstract function method_1();//children will give custom implementation 

    public function method_2() 
    { 
    // some code ... 

    $this->method_1(); //Call the method directly it will implement the child's method 
    /*Here I want to call method_1() of the child controller that have called this method i.e. method_2* automatically */ 
    } 
} 
+0

謝謝。實際上,我在父類方法中調用子方法,因爲父類需要子特定數據繼續前進,並且每個子都會有自己的生成此數據的方法的自定義實現。但是父類方法調用這個特定於孩子的方法對於所有孩子來說都是通用的。請告訴我這樣做真的是錯誤的。 – stackoverflownewbie

+0

父類對象不應該依賴於它的任何子對象,儘管你在做什麼在理論上是可行的。如果你解釋了這個要求,那麼可以確定你的問題有一些解決方法。 – aeonsleo

+0

請查看以下鏈接http://php.net/manual/en/language.oop5.abstract.php中的示例#1。他們是不是在做我試圖做的同樣的事情(或者你在回覆中的代碼中做過)。手冊可能是錯誤的。幫助我在這裏 – stackoverflownewbie