这是我的设置。
class testA {
function doSomething() {
return something;
}
}
$classA = new testA();
class testB {
$classA->doSomething();
}
这不适用于该类:$ classA-> doSomething(); 我怎么会这样做?
答案 0 :(得分:2)
有两种方法可以做到:聚合和合成
聚合是指您传递对象的引用。如果对象容器被销毁,则包含的对象不是
class testB {
private $classA;
public function setClassA ( testA $classA ) {
$this->classA = $classA;
}
public function doStuffWithA() {
$this->classA->doSomething();
}
}
$classA = new testA;
$classB = new testB;
// this is the aggregation
$classB->setClassA( $classA );
$classB->doStuffWithA();
unset($classB); // classA still exists
组合是指对象由另一个对象拥有。因此,如果所有者被销毁,两者都将被销毁。
class testB {
private $classA;
public function __construct() {
$this->classA = new testA;
}
public function doStuffWithA() {
$this->classA->doSomething();
}
}
$classB = new testB; // new testA object is created
$classB->doStuffWithA();
unset($classB); // both are destroyed
答案 1 :(得分:0)
你不能把语句放在这样的类中。声明$classA->doSomething()
也必须在函数内部。