使用A类对象从非相关类B访问A类中的函数

时间:2011-08-18 00:52:50

标签: php class

  

可能重复:
  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();

3 个答案:

答案 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();