cbe*_*eer 53
如果您正在使用PHP5(您应该使用),请查看SPL ArrayObject类.文档不太好,但我想如果你扩展ArrayObject,你就会得到你的"假"数组.
编辑:这是我的简单例子; 我担心我没有一个有价值的用例:
class a extends ArrayObject {
public function offsetSet($i, $v) {
echo 'appending ' . $v;
parent::offsetSet($i, $v);
}
}
$a = new a;
$a[] = 1;
Run Code Online (Sandbox Code Playgroud)
小智 26
实际上,最佳解决方案是实现ArrayAccess接口的四种方法:http://php.net/manual/en/class.arrayaccess.php
如果您还想在'foreach'的上下文中使用您的对象,则必须实现'Iterator'接口:http: //www.php.net/manual/en/class.iterator.php
对于PHP 5.0+中的简单而干净的解决方案,您需要实现ArrayAccess接口和覆盖函数offsetGet,offsetSet,offsetExists和offsetUnset.您现在可以像使用数组一样使用对象.
例:
<?php
class A implements ArrayAccess {
private $data = array();
public function offsetGet($offset) {
return isset($this->data[$offset]) ? $this->data[$offset] : null;
}
public function offsetSet($offset, $value) {
if ($offset === null) {
$this->data[] = $value;
} else {
$this->data[$offset] = $value;
}
}
public function offsetExists($offset) {
return isset($this->data[$offset]);
}
public function offsetUnset($offset) {
unset($this->data[$offset]);
}
}
$obj = new A;
$obj[] = 'a';
$obj['k'] = 'b';
echo $obj[0], $obj['k']; // print "ab"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42480 次 |
| 最近记录: |