我现在正在开发一个项目,我有一个实现ArrayAccess接口的类。
然而,我收到的错误是我的实施:
必须与ArrayAccess :: offsetSet()的兼容。
我的实现如下:
public function offsetSet($offset, $value) {
if (!is_string($offset)) {
throw new \LogicException("...");
}
$this->params[$offset] = $value;
}
所以,对我来说,看起来我的实现是正确的。知道什么是错的吗?非常感谢!
班级看起来像这样:
class HttpRequest implements \ArrayAccess {
// tons of private variables, methods for working
// with current http request etc. Really nothing that
// could interfere with that interface.
// ArrayAccess implementation
public function offsetExists($offset) {
return isset ($this->params[$offset]);
}
public function offsetGet($offset) {
return isset ($this->params[$offset]) ? $this->params[$offset] : NULL;
}
public function offsetSet($offset, $value) {
if (!is_string($offset)) {
throw new \LogicException("You can only assing to params using specified key.");
}
$this->params[$offset] = $value;
}
public function offsetUnset($offset) {
unset ($this->params[$offset]);
}
}
班级看起来像这样:
class HttpRequest implements \ArrayAccess {
// tons of private variables, methods for working
// with current http request etc. Really nothing that
// could interfere with that interface.
// ArrayAccess implementation
public function offsetExists($offset) {
return isset ($this->params[$offset]);
}
public function offsetGet($offset) {
return isset ($this->params[$offset]) ? $this->params[$offset] : NULL;
}
public function offsetSet($offset, $value) {
if (!is_string($offset)) {
throw new \LogicException("You can only assing to params using specified key.");
}
$this->params[$offset] = $value;
}
public function offsetUnset($offset) {
unset ($this->params[$offset]);
}
}
答案 0 :(得分:1)
在我看来,文件顶部的namespace
或use
指令会让它找到与之兼容的错误ArrayAccess
接口。但是,如果没有这些指令,就无法确定。
一般情况下:
您自己的命名空间不应以反斜杠开头或结尾:
使用:
namespace Web\Http;
不要 使用以下内容:
namespace \Web\Http;
或namespace \Web\Http\;
对于您在文件中引用的每个类和接口,添加use
指令:
namespace MyProject;
use MyLibrary\BaseClass; // note no backslash before the namespace name
use \ArrayAccess;
use \Iterator;
use \Countable;
class MyClass extends BaseClass implements ArrayAccess, Iterator, Countable
{
/* Your implementation goes here as normal */
}
答案 1 :(得分:0)
唯一吸引我眼球的是:
public function offsetGet($offset) {
return isset ($this->params[$offset]) ? $this->params[$offset] : NULL;
}
也许用以下代替:
public function offsetGet($offset) {
return (isset ($this->params[$offset]) ? $this->params[$offset] : NULL);
}
会完成这个技巧。
它也可能是一个语法错误,从您未粘贴的代码部分拖延。