簡體   English   中英

如何從類中訪問外部變量?

[英]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的新秀。 請幫我。

你不能,因為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
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM