2012-07-20 44 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