0

我有两个班级,分别称为 A 班和 B 班。我创建了“A”班。在此我创建了一个“B”类。如何从“B”类访问“A”类变量?

class A
{
    var letter;
    var writers;

    function __construct()
    {
        $this-letter = 'SOMETHING';
        $this->writers = new B;         
    }

}

class B extends Writers
{
    function __construct()
    {
        parent::__construct();
        echo $letter; //This is where i want to acces outside variable (CLASS 'A')
    }

}

我希望我很清楚。我只是 OOP 的新手。请帮我。

4

5 回答 5

1

如果你真的需要使用这个结构,我想你可以这样做:

class A
{
    var letter;
    var writers;

    function __construct()
    {
        $this-letter = 'SOMETHING';
        $this->writers = new B($this);         
    }

}

class B extends Writers
{
    var $a;

    function __construct(A $a)
    {
        parent::__construct();
        $this->a = $a;
        echo $this->a->letter; 
    }

}

这样,B将持有对A创建它的对象的引用。但是,如果可能的话,我宁愿建议您更改您的类拓扑。

于 2013-10-01T18:55:45.700 回答
1

你不能,因为$letter在 A 中没有声明为public并且 B 没有扩展 A。

如果你不想暴露 A 的数据(OOP 的重要原则之一),你应该使用封装。在 A 类中创建一个 getter

public function getLetter()
{
    return $this->letter;
}

然后在 B 的构造方法中,创建 A 的实例并使用所述 getter

$a = new A();
$letter = $a->getLetter();
于 2013-10-01T18:49:42.000 回答
0

您的 B 类需要以某种方式引用 A 对象。您可以简单地添加到 B :

class B extends Writers
{
    private $a;

    function __construct()
    {
        parent::__construct();
        echo $letter; //This is where i want to acces outside variable (CLASS 'A')
    }

   public function A($a)
   {
        $this->a = $a;
   }
}

接下来,只需让您的 A 对象引用它自己的 B 对象。

class A
{
    var letter;
    var writers;

    function __construct()
    {
        $this-letter = 'SOMETHING';
        $this->writers = new B;    
        $this->writers->A($this);
    }

}

另一种方法是静态方法。

于 2013-10-01T18:54:37.507 回答
0

很难确切地说出你想要什么,但正如我解释的那样:

class A extends Writers
{
    var letter;
    var writers;

    function __construct()
    {
        $this-letter = 'SOMETHING';
        $this->writers = new B;         
    }

}

class B extends A
{
    function __construct()
    {
        parent::__construct();
        echo $this->letter; //This is where i want to acces outside variable (CLASS 'A')
    }

}
于 2013-10-01T18:58:33.747 回答
-1

您可以使用静态变量。像这样:

class A
{
    static $letter;
    function __construct()
    {
        self::$letter = 'SOMETHING';
    }

}
$objA = new A();

class B
{
    function __construct()
    {
        $letter = A::$letter;
        echo $letter; //print SOMETHING
    }

}
于 2013-10-01T18:59:40.017 回答