我有一个类,它实际操作一个复杂的数组,使操作更简单。原始数组的格式如下:
array(
array(
"name" =>"foo",
"type" =>8, //The array is NBT format and 8 stands for string
"value" =>"somevalue"
)
}
类接受如上数组作为构造函数:
class NBT_traverser implements ArrayAccess {
function __construct(&$array) {
$this->array = $array;
}
}
然后,访问成员的方式如下:
$parser = new NBT_traverser($somearray);
echo $parser["foo"]; //"somevalue"
当我print_R
类时,我得到了它的值列表和原始的复杂数组。这样的:
object(NBT_traverser)#2 (1) {
["nbt":"NBT_traverser":private]=> &array(1) {
/*Tons of ugly array contents*/
}
相反,我想得到像print_r
的输出:
array(
"foo" => "somevalue"
)
有可能欺骗print_r
做到这一点吗?当前的行为使得使用类比不使用类更难调试。
当然,我可以编写自己的方法来打印它,但是我想使该类的用户使用起来更简单。相反,我想给print_R
一些东西,它将打印为数组。
你应该没有问题,如果你正在扩展ArrayAccess
只是写一个方法来获得你的值
$random = range("A", "F");
$array = array_combine($random, $random);
$parser = new NBT_traverser($array);
echo $parser->getPrint();
输出Array
(
[A] => A
[B] => B
[C] => C
[D] => D
[E] => E
[F] => F
)
使用类
class NBT_traverser implements ArrayAccess {
private $used; // you don't want this
protected $ugly = array(); // you don't want this
public $error = 0202; // you don't want this
private $array = array(); // you want this
function __construct(&$array) {
$this->array = $array;
}
function getPrint() {
return print_r($this->array, true);
}
public function offsetSet($offset, $value) {
if (is_null($offset)) {
$this->array[] = $value;
} else {
$this->array[$offset] = $value;
}
}
public function offsetExists($offset) {
return isset($this->array[$offset]);
}
public function offsetUnset($offset) {
unset($this->array[$offset]);
}
public function offsetGet($offset) {
return isset($this->array[$offset]) ? $this->array[$offset] : null;
}
}
您可以在类中使用__toString函数
class Test
{
private $_array = array();
public function __toString()
{
return print_r($this->_array, true);
}
}
然后返回你的class
$test = new Test();
echo $test;
我想这会打印出你想要的数组?
Array
(
)