2014-05-05 138 views
3

說B類的對象是A類的屬性。如何從B類對象的方法調用A類對象的方法?沒有傳遞對象鏈接,什麼樣的解決方案會很好?來自子對象(PHP)的調用對象方法

謝謝!

這裏去的代碼示例:

class A{ 
    var $b; 

    function __construct(){ 
     $this->b = new B(); 
    } 

    function f1(){ 
     $this->b->f3(); 
    }   

    function f2(){ 
     echo 'hello!'; 
    } 
} 

class B{ 
    function f3(){ 
     // call f2() method in object $obj(not new A()) 
    } 
} 

$obj = new A(); 
$obj->f1(); 
+2

我認爲你唯一的方法就是將'$ this'傳遞給'f3()'。 –

+1

閱讀「依賴注入」。你使用'var b;'告訴我你已經習慣了古老的PHP4代碼。 PHP5提供了全新的可能性和簡單的設計模式集成! – DanFromGermany

+1

由於某種原因,其他人無法發佈對此問題的答案? – Sammitch

回答

1

您可以使用一個靜態函數

public static function f2{ 
    echo 'hello!'; 
} 

定義爲

function f3(){ 
    A::f2(); 
} 

F3這可能不是最終你想要的解決方案但是。查看更多信息here

+0

除非函數具有對當前實例的引用。 –

+0

是的,我用一個鏈接更新了答案,使其更加清晰。 – agressen

+0

根據'f2()'的作用,這可以工作:-) –

1

您可以訪問該實例的函數的唯一方法是,如果您將它作爲依賴項注入B對象。你可以在構造函數中注入它,像這樣:

<?php 

class A { 
    protected $b; 

    public function __construct() { 
     $this->b = new B($this); 
    } 

    public function f1() { 
     $this->b->f3(); 
    }   

    public function f2() { 
     echo 'hello!'; 
    } 
} 

class B { 
    protected $a; 

    public function __construct($a) { 
     $this->a = $a; 
    } 

    public function f3() { 
     $this->a->f2(); 
    } 
} 

$obj = new A(); 
$obj->f1();