这是我的第二个问题,甚至想到,我自己回答了前一个问题。无论如何,我有一个关于如何从另一个类调用非静态方法的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()?
答案 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();