Hi Sven,
Ich gebe nur mal so zu bedenken: Wenn XML im Spiel ist, dann könnte es durchaus sein, dass dein XML-Parser kein wahres PHP-Array produziert, sondern irgendeine nette Objekt-Sonderform mit Gettern und Settern, die ein Array nur simulieren. Solch eine Konstruktion deckt man mit var_dump eventuell nicht auf.
Darüber hab ich gestern auch schon nachgedacht, bin allerdings zu dem Schluss gekommen, dass du es nicht schaffst, den Namen der Klasse bzw. die Tatsache, dass $w ein Objekt ist vor var_dump() und print_r() zu verstecken.
Ich habs grade mal ausprobiert, einmal mit einer selbst geschriebenen Klasse (Quick'n Dirty) und einmal mit der PHP-Klasse ArrayObject():
<?php
class MyArr implements ArrayAccess {
private $_data;
public function __construct() {
$this->_data = array();
}
public function offsetGet($k) {
return $this->_data[$k];
}
public function offsetSet($k, $v) {
$this->_data[$k] = $v;
}
public function offsetExists($k) {
return isset($this->_data[$k]);
}
public function offsetUnset($k) {
unset($this->_data[$k]);
}
public function __get($k) {
return $this->_data[$k];
}
public function __set($k, $v) {
$this->_data[$k] = $v;
}
public function __isset($k) {
return isset($this->_data[$k]);
}
public function __unset($k) {
unset($this->_data[$k]);
}
}
$w = new MyArr();
$w['test'] = 'ABC';
print_r($w);
var_dump($w);
$w = new ArrayObject();
$w['test'] = 'DEF';
print_r($w);
var_dump($w);
Sowohl print_r() als auch var_dump() geben in beiden Fällen korrekt die Identität des Objekts wieder, also object(MyArr) bzw. object(ArrayObject).
Wobei man bei der MyArr-Klasse die __*-Methoden auch genauso gut weglassen kann, denn die werden nie genutzt, wenn man auf das Objekt wie auf ein Array zugreift.
Viele Grüße,
~ Dennis.