2012-10-10 84 views
2

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

class A { 

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

} 

,并在另一个文件中的第二类称为b B.class.php

require_once 'A.class.php'; 

class B { 

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

} 

我认为现在是clearn 。如何:从类A调用方法doSomething()?

回答

0

您需要实例类A的对象只能做B类的方法里面

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

    } 
4

B类需要一个类的对象调用方法上:

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

或者,您可以创建B的外面的实例,并传递到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); 
+0

很简单,谢谢! – Be0wulf

+0

@MohamedAdibErrifai没问题,希望它有帮助! – newfurniturey

+0

我的帖子不错的副本 – JvdBerg

0
class B { 

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


} 
2

如何注入类A到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); 
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(); 
相关问题