2014-05-05 89 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();