我有一个类,它实际上是在复杂的数组上操作,以使操作更简单。原始数组的格式如下所示:
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
一些东西,它会打印成数组。
答案 0 :(得分:2)
如果您要扩展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;
}
}
答案 1 :(得分:0)
您可以在班级中使用__toString函数
class Test
{
private $_array = array();
public function __toString()
{
return print_r($this->_array, true);
}
}
然后只是回应你的课程
$test = new Test();
echo $test;
我认为这会打印出您想要的阵列吗?
Array
(
)