$elem) { echo "\t"; var_dump($domElementStack[$key]->nodeName); } echo '} '; echo 'Cur:'."\t"; var_dump($domCurElement->nodeName); } /** The basic element class */ class Element { private $name, $ns, $lname, $attrs = array(); private $element, $node; function __construct() { $args = func_get_args(); if (is_array($args[0])) $args = $args[0]; #Phase 1: parse arguments reset($args); list($key, $arg) = each($args); $tagname = $arg; while (list($key, $arg) = each($args)) { $aname = $arg; list($key, $arg) = each($args); $avalue = $arg; $this->attrs[$aname] = $avalue; } #phase 1.5: place temporary variables into object vars $this->name = $tagname; list($this->ns, $this->lname) = splitName($this->name); #Phase 2: create, initialize, and add DOMElement object global $domCurElement, $domDocument, $domElementStack; echo ' '; $this->node =& $domDocument->createElement($this->name); dumpstack(); $this->element =& $domCurElement->appendChild(&$this->node); $domElementStack[] =& $this->element; $GLOBAL['domCurElement'] =& end($domElementStack); dumpstack(); foreach ($this->attrs as $name => $value) { list($ns, $lname) = splitName($name); $domCurElement->setAttribute($name, $value); } echo 'construct: '.count($domElementStack).' '; } static function end() { global $domCurElement, $domDocument, $domElementStack; array_pop($domElementStack); $domCurElement =& end($domElementStack); echo 'end: '.count($domElementStack).PHP_EOL; } static function &add() { $args = func_get_args(); return new Element($args); echo 'add: '.count($domElementStack).PHP_EOL; } } function &Element() { $args = func_get_args(); $tag =& new Element($args); Element::end(); return $tag; } require_once('xhtml-1.0s.php'); ?>