可能重复:
Call function of class ONE from class TWO without extend?
为什么这不起作用?
class A {
function one() {
echo "Class A";
}
}
class B {
function two() {
echo "Class B";
$a->one();
}
}
$a = new A;
$b = new B;
$b->two();
答案 0 :(得分:0)
$a
无法访问 Class B
。请阅读Variable Scope
陷阱>
class A {
public function one() {
echo "Class A";
}
}
class B {
public function two() {
echo "Class B";
$a = new A;
$a->one();
}
}
$b = new B;
$b->two();
答案 1 :(得分:0)
这不起作用,因为$a
不是全局变量。
如果您事先将$a
声明为B类中的全局,那么它应该有效。
class B {
function two() {
global $a;
echo "Class B";
$a->one();
}
}
答案 2 :(得分:0)
如上所述,这是一个可变范围问题。 B::two()
的范围不包括已在全局命名空间中声明的变量$a
。
最好的办法是将$a
作为依赖项传递给B
。有几种方法可以做到这一点......
在B::two()
public function two(A $a)
{
echo 'Class B';
$a->one();
}
然后
$b->two($a);
作为B
class B
{
private $a;
public function __construct(A $a)
{
$this->a = $a;
}
public function two()
{
echo 'Class B';
$this->a->one();
}
}
然后
$b = new B($a);
$b->two();