Per prima cosa il codice 
Codice PHP:
/* Molto semplificato */
namespace tags;
abstract class Tag {
protected $content = array();
private function parse ($var) {
if (/* $var è un'istanza di una classe "estesa" dalla classe Tag */) return $var;
/* Converto $var in una stringa e ritorno il valore convertito */
}
public function add_content() {
/* Argomenti passati alla funzione (possono essere un qualsiasi numero) */
$args = func_get_args();
foreach ($args as $argoument) {
/* Aggiusto i valori passati e li metto nell'array $content */
$this->content[] = $this->parse($argoument);
}
}
}
class p extends Tag {/* ... */}
Codice PHP:
$p = new tags\p;$p2 = new tags\p;
$p->add_content($p2);$p2->add_content("aaa", "bbb");
print_r($p);

Per qualche motivo nell'array $content di $p il valore relativo a $p2 si aggiorna anche dopo essere stato settato...
Nel senso che dal print_r vedo che $p->$content[0]->$content è un array che contiene "aaa" e "bbb", anche se sono stati settati dopo che $p2 è stato aggiunto a $p->$content...
Un po' come se lo avessi passato come referenza, ma i valori restituiti da func_get_args() non sovrebbero esserlo... (e anche il parametro della funzione parse è $var, non &$var)...