我们如何通过php中的另一个类的对象调用一个类的方法

时间:2010-05-10 06:58:09

标签: php oop

我想知道PHP中有任何方法可以从另一个类对象中调用一个类的方法。让我说清楚  这是一个班级

    class A() {
    public function showData(){
        //here is method of class A
   }
}

 // here is another class

class B(){
      public function getData(){
            //some method in class B
         }
}

  //now i create two objects

$objA= new class A();
$objB=new class B();

now i want to call this
$objB->showData();<---

是可能的..通过任何方法(使用公共,继承,子父等...) 请帮帮我

4 个答案:

答案 0 :(得分:2)

class B extends A {
    // .....
}

现在你可以实例化一个B类对象,也可以从A类调用方法。

答案 1 :(得分:2)

在提出问题的方式中,@ kemp的答案很有意义。现在,您还可以:

在B中实例化

class A {
    public function showData() {
        // some logic here
    }
}

class B {
    public function getData(){
        $a = new A;
        $a->showData();
    }
}

$b = new B;
$b->getData();

将A注入B

class A {
    public function showData() {
        // some logic here
    }
}

class B {
    public function getData(A $a){
        $a->showData();
    }
}

$b = new B;
$b->getData(new A);

什么是最好的取决于您想要实现的功能。

答案 2 :(得分:1)

你也可以使用魔术方法

Class A {
    public function showData() {}
}

Class B {
    protected $a = null;
    public function __construct(A $a) {
        $this->a = $a;
    }
    public function __call($name, $args) {
        if (is_callable(array($this->a, $name))) {
            return $this->a->$name();
        }
        throw new BadMethodCallException('Invalid Method');
    }
    public function getData() {}
}

这样,当你调用$ b-&gt; showData()时,将在B上调用__call('showData',array())。然后B将检查它是否可以调用$ a-&gt; showData(),如果可以,它会。

答案 3 :(得分:1)

我的两便士;

class A {
    public function showData() {
        // some logic here
    }
}

class B {

    private $a;

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

    public function A(){
        return $this->a;
    }

    public function getData(){
       //whatever
    }
}

$bah = new B();

$bah->A()->showData();

我认为这是OO概念下的数据隐藏/封装。