2012-07-20 43 views
0

我最近做了一個cookie類,但不幸的是它並不是真的OOP,因爲我讓這個類做了2個不同的事情。即設置/獲取cookie並存儲te cookie。而OOP意味着每個班級都有自己的操作。所以我決定重寫我的課程,但我無法讓它工作。這是我應該怎麼做的。OOP Cookie類

我做了一個CRUD的接口和一個實現這個接口的類叫做CookieStorage。我也做了一個Cookie類,設置cookie值等,但現在通過創建這兩個類它不工作,因爲我得到這個錯誤:致命錯誤:調用未定義的方法CookieStorage :: getName()在/ Applications/MAMP/htdocs/library/lib/CookieStorage.php 27行

下面你可以找到我的代碼。提前致謝!

<?php 

interface StorageInterface { 
    public function set(Cookie $cookie); 
    public function get(Cookie $cookie); 
    public function update(Cookie $cookie); 
    public function delete(Cookie $cookie); 
} 

class CookieStorage implements StorageInterface { 

/** 
* constructor 
*/ 
public function __construct() { 

} 

/** 
* Create cookie. 
*/ 
public function set(Cookie $cookie) { 
    return setcookie( 
     $this->getName(), 
     $this->getValue(), 
     $this->getTime(), 
     $this->getPath(), 
     $this->getDomain(), 
     $this->getSecure(), true 
    ); 
} 

/** 
* Get cookie. 
*/ 
public function get(Cookie $cookie) { 
    return $_COOKIE[$this->getName()]; 
} 

/** 
* Update cookie. 
*/ 
public function update(Cookie $cookie) { 
    return $this->update(); 
} 

public function delete(Cookie $cookie) { 
    return $this->delete(); 
} 

} 

?> 
+0

'$這 - >的getName(), $這 - >的getValue(), $這 - >的getTime(), $這 - >的getPath(), $這 - > getDomain(), $ this-> getSecure()'這些都沒有定義? – Esailija 2012-07-20 08:15:30

+1

你的班級中沒有getName方法,這就是爲什麼你會得到那個錯誤 – Gntem 2012-07-20 08:15:37

+0

我是否也必須在CookieStorage中定義這個方法? – Reshad 2012-07-20 08:21:13

回答

1

看起來你想使用$cookie->getName()$this指向存儲類,但您想要存儲cookie參數的屬性。

更新: 您在評論中提到的電話是正確的。如果您傳遞了Cookie對象,那麼在set函數CookieStorage中,您需要使用$cookie而不是$this

+0

是的,這是正確的,但我想如果我這樣使用它會工作: $ cookieStorage = new CookieStorage(); $ cookieStorage-> set($ cookie); – Reshad 2012-07-20 08:21:56

+0

感謝它的工作!那是我做錯了。 – Reshad 2012-07-20 08:30:01