2012-04-04 154 views
2

有一個我正在使用的類,我重寫了類中的變量以將它們更改爲我需要的值,但我也不確定是否或如何處理問題。我需要在類調用它們之前爲每個這些URL添加一個生成的密鑰。我無法修改類文件本身。如何在擴展類公共變量中使用變量

use Theme/Ride 

class ETicket extends Ride { 

    public $key='US20120303'; // Not in original class 
    public $accessURL1 = 'http://domain.com/keycheck.php?key='.$key; 
    public $accessURL2 = 'http://domain.com/keycheck.php?key='.$key; 

} 

我知道你不能在公共類變量的設置中使用變量。只是不確定以適當的格式實際執行此類操作的方式。

我的OOP技能很弱。我承認。所以如果有人對我在哪裏可以閱讀並獲得線索有什麼建議,那也是值得讚賞的。我想我需要OOP for Dummies。 =/

----更新---

最初的RIDE類有2個URL集。

public $accessURL1 = "http://domain.com/index.php"; 
public $accessURL2 = "http://domain.com/index2.php"; 

我想重寫它們,所以RIDE類將使用我的新域。

我可以添加以下和它的作品...

class ETicket extends RIDE { 
    public $accessURL1 = 'http://mydomain.com/myindex.php'; 
    public $accessURL2 = 'http://mydomain.com/myindex2.php'; 
} 

不過,我也想從其他地方($鍵)作爲參數傳遞變量到URL時,我重寫它們,所以當我調用RIDE它在最後有一個值爲KEY的URL。 (?關鍵=鍵值)

回答

1

你接近,如果你不想讓調用代碼改變$鍵,你可以這樣做:

class ETicket extends Ride { 

    public function getKey() 
    { 
     return 'US20120303'; 
    }  

    public function generateUrl() 
    { 
     return 'http://domain.com/keycheck.php?key=' . $this->getKey(); 
    } 
} 

// Calling code example 
$eTicket= new ETicket(); 

// $key is a member of ETicket class, so just call on generateUrl which will 
// build and return the url 
var_dump($eTicket->generateUrl()); 

您也可以允許調用代碼來改變關鍵如果需要的話,加入一個公共的setter /吸氣:

class ETicket extends Ride { 

    protected $key; 

    public function setKey($key) 
    { 
     $this->key = $key; 
    } 

    public function getKey() 
    { 
     return $this->key; 
    } 

    public function generateUrl() 
    { 
     return 'http://domain.com/keycheck.php?key=' . $this->getKey(); 
    } 
} 

// Calling code example 
$eTicket= new ETicket(); 

$eTicket->setKey('US20120303'); 
var_dump($eTicket->generateUrl()); 

- UPDATE -

有幾個選項,您可以APPE第二關鍵看你的URL作爲調用代碼的一部分,就像這樣:

$eTicket= new ETicket(); 

$url = $ride->accessURL1 . '?key=US20120303'; 

或者,使用方法(輕微改變接受直接鍵),因爲我前面描述:

class ETicket extends Ride 
{ 
    public function generateUrl($key) 
    { 
     return $this->accessURL1 . '?key=' . $key; 
    } 
} 

$eTicket= new ETicket(); 

$url = $eTicket->generateUrl('US20120303'); 

我猜問題是,如果沒有將變量連接到成員變量初始化,您無法完成原來要求的操作。

+0

嗨,這個答案有幫助嗎? – 2012-04-05 03:58:53

+0

對不起,延遲迴復。 我得到你在做什麼,但不知道如何在我使用的環境中實現它。我猜測這是我對這個問題的描述,我似乎有。 我會盡量擴大最初的問題。 – 2012-04-10 05:11:49