2

这是我的第二个问题,甚至认为,我自己回答了前一个问题。无论如何,我对 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() ?

4

5 回答 5

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);
于 2012-10-10T18:40:29.293 回答
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 );
于 2012-10-10T18:42:09.523 回答
0
class B {

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


}
于 2012-10-10T18:40:41.057 回答
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();
于 2014-11-28T12:42:06.567 回答
0

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

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

  }
于 2012-10-10T18:39:55.950 回答