如何从另一个类调用非静态方法

时间:2012-10-10 18:38:16

标签: php oop

这是我的第二个问题,甚至想到,我自己回答了前一个问题。无论如何,我有一个关于如何从另一个类调用非静态方法的OOP的基本问题。例: 我们在文件A.class.php中有一个名为A的类

class A {

    public function doSomething(){
     //doing something.
    }

}

和另一个文件B.class.php

上的第二个名为B的类
require_once 'A.class.php';

class B {

    //Call the method doSomething() from  the class A.

}

我认为现在它已经清除了。如何:从A类调用方法doSomething()?

5 个答案:

答案 0 :(得分:4)

B类需要一个A类对象来调用方法:

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

或者,您可以在B外部创建A的实例并将其传递给B的构造函数以创建对它的全局引用(或将其传递给您选择的单个方法):

class B {
    private $a = null;
    public function __construct($a) {
        $this->a = $a;
    }
    public function doStuff() {
        $this->a->doSomething();
    }
}

$a = new A();
$b = new B($a);

答案 1 :(得分:2)

如何将A类注入B,使B依赖于A.这是最原始的依赖注入形式:

class A 
{    
  public function doSomething()
  {
    //doing something.
  }
}

class B 
{
  private $a;

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

  //Call the method doSomething() from  the class A.
  public function SomeFunction()
  {
    $this->a->doSomething();
  }  
}

这是这样构造的:

$a = new A();
$b = new B( $a );

答案 2 :(得分:0)

您需要实例化A类的对象。您只能在B类的方法中执行此操作。

  class B{
     public function doSomethingWithA(){
          $a = new A();
          return $a->doSomething();
      }

  }

答案 3 :(得分:0)

class B {

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


}

答案 4 :(得分:0)

我知道这是一个老问题,但考虑到我今天发现它,我想我会在@ newfurniturey的回答中添加一些东西。

如果您希望在A类中保留对B级的访问权限,那么我就是这样做的:

class A 
{    
    private $b = null
    public function __construct()
    {
        $this->b = new B($this);

        if (!is_object($this->b) {
            $this->throwError('No B');
        }

        $this->doSomething();
    }

    public function doSomething() {
        $this->b->doStuff();
    }

    private function throwError($msg = false) {
        if (!$msg) { die('Error'); }
        die($msg);
    }
}

class B {
    public function doStuff() {
        // do stuff
    }
}

这是这样构造的:

$a = new A();