2016-01-12 231 views
0

我有兩個類實現相同的接口。在兩個類之間傳遞變量

在第一類中,我有一個名爲author的數組變量。通常在相同類中的兩個不同函數之間傳遞變量時,一旦設置,就使用$this->author;

這似乎不適用於兩個類之間。有人可以澄清我將如何從第一課的第二課中調用一個變量嗎?

謝謝!

+0

在OOP中,你不能在同一個類中使用相同的變量,你應該有基類,這兩個類將擴展到基類並取值 –

+0

你是否暗示了修改類之間的相同變量? – RomanPerekhrest

+0

您試圖通過在實現相同接口的兩個類之間傳遞變量來實現什麼目標? – dchayka

回答

1

http://php.net/manual/en/language.oop5.php面向對象的設計概念的nomanclature。

當您使用$this->author時,您不會在函數之間傳遞變量。這兩個函數引用了這兩個函數所屬的對象的相同變量。

author是該類的一個屬性。

沒有地方可以放置變量並讓它由兩個不同的類引用。但是,您可以在一個類上使用public屬性,並引用來自其他任何類的屬性。

http://php.net/manual/en/language.oop5.visibility.php公共房地產。

但是,該技術並沒有捕捉到你有兩個函數引用一個公共屬性的方案。

1

您可以使用性狀(水平繼承)http://php.net/manual/es/language.oop5.traits.php

雖然它只會幫助你,如果你的變量只會協商,不進行修改。那是因爲,特徵允許你指定靜態屬性,但是每個使用該特徵的類都有這些屬性的獨立實例。

http://php.net/manual/es/language.oop5.traits.php#107965

這是一個例子:

trait myTrait { 
    public $sameVariable = 'shared'; 

    public function getMessage() { 
     echo $this->sameVariable; 
    } 
} 

class A { 
    use myTrait; 
    public function getMessageA() { 
     echo $this->sameVariable;   //Prints shared 
     $this->sameVariable = 'changed'; 
     echo $this->sameVariable;   //prints changed 
    } 
} 


class B { 
    use myTrait; 
    public function getMessageB() { 
     echo $this->sameVariable;   //Prints shared 
    } 
} 

$a = new A(); 
$b = new B(); 

$a->getMessageA(); 
$b->getMessageB(); 

這允許您重用讓它變的特質,而不是複製你的代碼,但我不明白你的情況這麼好。所以這可能不是你想要的=/