如何从类内部访问外部变量


How access outside variables from within class?

我有两个类,称为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-ing的菜鸟。请帮助我。

你不能

,因为 A 中的$letter没有声明为公共的,B 不会扩展 A。

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

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

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

$a = new A();
$letter = $a->getLetter();

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

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对象的引用。但是,如果可能的话,我建议您更改类拓扑。

你的 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);
    }
}

另一种方法是静态方法。

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

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')
    }
}

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

class A
{
    static $letter;
    function __construct()
    {
        self::$letter = 'SOMETHING';
    }
}
$objA = new A();
class B
{
    function __construct()
    {
        $letter = A::$letter;
        echo $letter; //print SOMETHING
    }
}