作为数组的类的Print_R



我有一个类,它实际操作一个复杂的数组,使操作更简单。原始数组的格式如下:

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
(
)

相关内容

  • 没有找到相关文章

最新更新